65

I have a relative file path (for example "/res/example.xls") and I would like to get an InputStream Object of that file from that path.

I checked the JavaDoc and did not find a constructor or method to get such an InputStream from a path/

Anyone has any idea? Please let me know!

İsmail Y.
  • 3,579
  • 5
  • 21
  • 29
Allan Jiang
  • 11,063
  • 27
  • 104
  • 165

5 Answers5

93

Use FileInputStream:

InputStream is = new FileInputStream("/res/example.xls");

But never read from raw file input stream as this is terribly slow. Wrap it with buffering decorator first:

new BufferedInputStream(is);

BTW leading slash means that the path is absolute, not relative.

Tomasz Nurkiewicz
  • 334,321
  • 69
  • 703
  • 674
91
InputStream inputStream = Files.newInputStream(Path);
Shakirov Ramil
  • 1,381
  • 9
  • 13
  • flawless answer! – Gaurav Jul 14 '20 at 11:42
  • 2
    Consider using buffered version for better efficiency: [link](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/file/Files.html#newBufferedReader(java.nio.file.Path)) – SilverFox Oct 02 '20 at 09:48
4

Initialize a variable like: Path filePath, and then:

FileInputStream fileStream;
try {
    fileStream = new FileInputStream(filePath.toFile());
} catch (Exception e) {
    throw new RuntimeException(e);
}

Done ! Using Path you can have access to many useful methods.

Ahmed Ashour
  • 5,179
  • 10
  • 35
  • 56
4

Found this to be more elegant and less typing.

import java.nio.file.Files;
import java.nio.file.Paths;

InputStream inputStream = Files.newInputStream(Paths.get("src/test/resources/sampleFile.csv"));

Note: In my case, file was very small (used for Unit Tests), but prefer to use BufferedInputStream for better efficiency.

Sanjay Bharwani
  • 3,317
  • 34
  • 31
2

new FileInputStream("your_relative_path") will be relative to the current working directory.

michael667
  • 3,241
  • 24
  • 32