Contents

将File转换为Inputstream

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 文件打开流的三个简单而干净的解决方案。