Java FileOutputStream: path relative to program folder?

22,154

Solution 1

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.

Solution 2

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?)

Solution 3

Here you go:

String path = System.getProperty("user.dir");

Solution 4

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.

Share:
22,154
MarioDS
Author by

MarioDS

Updated on May 13, 2020

Comments

  • MarioDS
    MarioDS about 4 years

    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.

  • j13r
    j13r about 12 years
    You didn't understand correctly. He wants the program path, not the working directory.
  • MarioDS
    MarioDS about 12 years
    I tried by using "." + File.separator + "data" + File.separator + "file.dat" And it didn't work...
  • MarioDS
    MarioDS about 12 years
    Allright I tried it with a File and I printed the absolute path, its absolutely correct and it didn't work... It returns C:\blah\projectName\data\file.datas required...
  • Linh Lino
    Linh Lino almost 10 years
    use File("./filename") . It comes to ../workspace/myWorkingProject/filename