Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to specify filepath in java?

I have created a java application for "Debian Linux." Now I want that that application reads a file placed in the directory where the jar file of that application is specified. So what to specify at the argument of the File Object?

File fileToBeReaded = new File(...);

What to specify as argument for the above statement to specify relative filepath representing the path where the jar file of the application has been placed?

like image 927
Yatendra Avatar asked Nov 07 '09 13:11

Yatendra


5 Answers

If you know the name of the file, of course it's simply

new File("./myFileName")

If you don't know the name, you can use the File object's list() method to get a list of files in the current directory, and then pick the one you want.

like image 84
Carl Smotricz Avatar answered Nov 13 '22 04:11

Carl Smotricz


Are you asking about escape character issues?

If that is the case then use forward slashes instead of backward slashes like

"C:/Users/You/Desktop/test.txt"

instead of

"C:\Users\You\Desktop\test.txt"

like image 23
Brendan Avatar answered Nov 13 '22 03:11

Brendan


Using relative paths in java.io.File is fully dependent on the current working directory. This differs with the way you execute the JAR. If you're for example in /foo and you execute the JAR by java -jar /bar/jar/Bar.jar then the working directory is still /foo. But if you cd to /bar/jar and execute java -jar Bar.jar then the working directory is /bar/jar.

If you want the root path where the JAR is located, one of the ways would be:

File root = new File(Thread.currentThread().getContextClassLoader().getResource("").toURI());

This returns the root path of the JAR file (i.o.w. the classpath root). If you place your resource relative to the classpath root, you can access it as follows:

File resource = new File(root, "filename.ext");

Alternatively you can also just use:

File resource = new File(Thread.currentThread().getContextClassLoader().getResource("filename.ext").toURI());
like image 25
BalusC Avatar answered Nov 13 '22 03:11

BalusC


I think this should do the trick:

File starting = new File(System.getProperty("user.dir"));
File fileToBeRead = new File(starting,"my_file.txt");

This way, the file will be searched in the user.dir property, which will be your app's working directory.

like image 42
Geo Avatar answered Nov 13 '22 03:11

Geo


You could ask your classloader to give you the location of the jar:

getClass().getProtectionDomain().getCodeSource().getLocation().getPath();

...but I'd suggest to put the file you are looking for inside your jar file and read it as a resource (getClass().getResourceAsStream( "myFile.txt" )).

like image 25
tangens Avatar answered Nov 13 '22 02:11

tangens