Java Top

Get started with Spring 5 and Spring Boot 2, through the Learn Spring course:

> CHECK OUT THE COURSE

1. Overview

In this quick tutorial, we're going to show how to convert a File to an InputStream — first using plain Java and then Guava and the Apache Commons IO library.

This article is part of the Java – Back to Basics series here on Baeldung.

Further reading:

Java Scanner

A quick and practical set of examples for using the core Scanner Class in Java - to work with Strings, Files and user input.

Guava – Write to File, Read from File

How to Write to File and Read from a File using the Guava IO support and utilities.

Java Byte Array to InputStream

How to convert a byte[] to an InputStream using plain Java or Guava.

2. Convert Using Java

We can use the IO package of Java to convert a File to different InputStreams.

2.1. FileInputStream

Let's start with the first and simplest one — using a 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

Let's look at another method, where we can use DataInputStream to read binary or primitive data from a file:

@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

Finally, let's also look at how to use SequenceInputStream to concatenate the input stream of two files to a single 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);
}

Note that we're not closing the resulting stream in these examples for legibility.

3. Convert Using Guava

Next, let's see the Guava solution, using an intermediary ByteSource:

@Test
public void givenUsingGuava_whenConvertingFileToInputStream_thenCorrect() 
  throws IOException {
    File initialFile = new File("src/main/resources/sample.txt");
    InputStream targetStream = Files.asByteSource(initialFile).openStream();
}

4. Convert Using Commons IO

Finally, let's look at a solution using 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);
}

And there we have it. Three simple and clean solutions for opening a stream from a Java file.

5. Conclusion

In this article, we explored various ways to convert a File to InputStream by using different libraries.

The implementation of all these examples and code snippets can be found over on GitHub. This is a Maven-based project, so it should be easy to import and run as it is.

Java bottom

Get started with Spring 5 and Spring Boot 2, through the Learn Spring course:

>> CHECK OUT THE COURSE
Generic footer banner
Comments are closed on this article!