FileInputStream doesn't work with the relative path [closed]
Asked Answered
B

3

30

I tried to create an object from FileInputStream and pass the relative value of a file to its constructor, but it doesn't work properly and threw a FileNotFoundException

try {
   InputStream is = new FileInputStream("/files/somefile.txt");
} catch (FileNotFoundException ex) {
   System.out.println("File not found !");
}
Break answered 27/1, 2013 at 22:55 Comment(3)
/files is not a relative path. Do you mean ./files?Overview
That's not a relative path. It's an absolute path.Levigate
Either "./files/" or "files/" should work as a relative path.Swineherd
K
62

The / at the start will make the path absolute instead of relative.

Try removing the leading /, so replace:

InputStream is = new FileInputStream("/files/somefile.txt");

with:

InputStream is = new FileInputStream("files/somefile.txt");

If you're still having trouble, try making sure the program is running from where you think by checking the current directory:

System.out.println(System.getProperty("user.dir"));
Kun answered 27/1, 2013 at 23:1 Comment(2)
i found same error but with russian filename only what sould i do. My file path /storage/emulated/0/fourth_ррссттууффххцц.txt pls helpBianka
No, doesn't work if the file is in the same directory as the InputStream instance code.Ola
A
8

The other posters are right the path you are giving is not a relative path. You could potentially do something like this.getClass().getResourceAsStream("Path relative to the current class"). This would allow you to load a file as a stream based on a path relative to the class from which you call it.

See the Java API for more details: http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getResourceAsStream(java.lang.String)

Antipole answered 27/1, 2013 at 23:3 Comment(0)
H
5
  1. this is not a relative path, it is an absolute path.
  2. If you are on Windows you need to add your drive letter before your path:

InputStream is = new FileInputStream("C:/files/somefile.txt");

windows doesn't support the / symbol as "root"

If you want to load a file thatt you'll put in your JAR, you need to use

getClass().getResource("path to your file");

or

getClass().getResourceAsStream("path to your file");
Honna answered 27/1, 2013 at 22:57 Comment(3)
files is a package in the src folder of the project , and I want to make this folder or package part of the final .jar fileBreak
ok, but your path is not relative, so you need to use a relative path OR specify the absolute path for your fileHonna
okay , could you give me a code to get the absolute path of the final .jar file :)Break

© 2022 - 2024 — McMap. All rights reserved.