Reputation: 13063
What is the best way to find a path relative to the folder where a java application is "installed"?
I have a class with a static method: public static void saveToFile(String fileName)
When I call it with an absolute path, it works, but what I really want is the relative path to where the application is run from, and a folder.
I have not deployed my application, but right now I want to find a path relative to the (Netbeans) project root, and a folder within called data: ProjectName\data\file.dat. Should I use the File
class or make it into a URI
or something?
Note that I prefer it to be system-independent and will still work if the application is deployed. Eventually the (relative) pathname will be stored in a properties file.
Sorry if this question is a duplicate, any help is appreciated.
Upvotes: 4
Views: 25118
Reputation: 168825
What is the best way to find a path relative to the folder where a java application is "installed"?
OS manufacturers have been saying for a long time not to save files in the application directory.
Note that I prefer it to be system-independent and will still work if the application is deployed.
Instead put the File
in a sub-directory
of user.home
. User home is where it should be possible to establish a file object that can be read or written. It is also a place that is reproducible across runs, and platform independent.
Upvotes: 5
Reputation: 2405
To get the absolute path to a file use new File().getCanonicalFile().
new FileOutputStream(new File(".\\target\\dataset.xml").getCanonicalFile())
Upvotes: 0
Reputation: 2671
If you deploying as a jar, its possible to obtain the jar file name and path the current code is working in like this:
new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());
(from How to get the path of a running JAR file?)
Upvotes: 2
Reputation: 115368
To find relative path to current working directory say new File(".")
.
If you want to know absolute path of current working directory you can write new File(".").getAbsolutePath()
or File(".").getAbsoluteFile()`.
I hope this answers your question. I am sorry if I did not understand you correctly.
Upvotes: 1