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?
If you know the name of the file, of course it's simply
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.
I think this should do the trick:
This way, the file will be searched in the
user.dir
property, which will be your app's working directory.Are you asking about escape character issues?
If that is the case then use forward slashes instead of backward slashes like
instead of
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 byjava -jar /bar/jar/Bar.jar
then the working directory is still/foo
. But if youcd
to/bar/jar
and executejava -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:
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:
Alternatively you can also just use:
You could ask your classloader to give you the location of the jar:
...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" )
).