将File转换为Inputstream
Contents
1. 概述
在这个快速教程中,我们将展示如何**将File转换为InputStream——**首先使用纯 Java,然后使用 Guava 和 Apache Commons IO 库。
2. 使用 Java 进行转换
我们可以使用 Java 的IO 包 将一个File转换为不同的InputStream。
2.1. FileInputStream
让我们从第一个也是最简单的开始——使用FileInputStream:
@Test
public void givenUsingPlainJava_whenConvertingFileToInputStream_thenCorrect()
throws IOException {
File initialFile = new File("src/main/resources/sample.txt");
InputStream targetStream = new FileInputStream(initialFile);
}
2.2. DataInputStream
让我们看看另一种方法,我们可以使用 DataInputStream从文件中读取二进制或原始数据:
@Test
public final void givenUsingPlainJava_whenConvertingFileToDataInputStream_thenCorrect()
throws IOException {
final File initialFile = new File("src/test/resources/sample.txt");
final InputStream targetStream = new DataInputStream(new FileInputStream(initialFile));
}
2.3. SequenceInputStream
最后,我们还看看如何使用 SequenceInputStream将两个文件的输入流连接到单个InputStream:
@Test
public final void givenUsingPlainJava_whenConvertingFileToSequenceInputStream_thenCorrect()
throws IOException {
final File initialFile = new File("src/test/resources/sample.txt");
final File anotherFile = new File("src/test/resources/anothersample.txt");
final InputStream targetStream = new FileInputStream(initialFile);
final InputStream anotherTargetStream = new FileInputStream(anotherFile);
InputStream sequenceTargetStream =
new SequenceInputStream(targetStream, anotherTargetStream);
}
请注意,为了便于阅读,我们并没有关闭这些示例中的结果流。
3. 使用 Guava 进行转换
接下来,让我们看看使用中介ByteSource的 Guava 解决方案:
@Test
public void givenUsingGuava_whenConvertingFileToInputStream_thenCorrect()
throws IOException {
File initialFile = new File("src/main/resources/sample.txt");
InputStream targetStream = Files.asByteSource(initialFile).openStream();
}
4. 使用 Commons IO 转换
最后,我们来看一个使用 Apache Commons IO 的解决方案:
@Test
public void givenUsingCommonsIO_whenConvertingFileToInputStream_thenCorrect()
throws IOException {
File initialFile = new File("src/main/resources/sample.txt");
InputStream targetStream = FileUtils.openInputStream(initialFile);
}
我们终于得到它了。从 Java 文件打开流的三个简单而干净的解决方案。