In Java, we can use System.getProperty("user.dir")
to get the current working directory, the directory from where your program was launched.
String dir = System.getProperty("user.dir");
// directory from where the program was launched
// e.g /home/favtuts/projects/core-java/java-io
System.out.println(dir);
One of the good things about this system property user.dir
is we can easily override the system property via a -D
argument, for example:
java -Duser.dir=/home/favtuts/ -jar abc.jar
1. Working Directory
The below program shows different ways like File
, Paths
, FileSystems
, or system property to get the current working directory; all methods will return the same result.
CurrentWorkingDirectory.java
package com.favtuts.io.howto; import java.io.File; import java.nio.file.FileSystems; import java.nio.file.Paths; public class CurrentWorkingDirectory { public static void main(String[] args) { //printCurrentWorkingDirectory1(); //printCurrentWorkingDirectory2(); //printCurrentWorkingDirectory3(); printCurrentWorkingDirectory4(); } // System.Property private static void printCurrentWorkingDirectory1() { String userDirectory = System.getProperty("user.dir"); System.out.println(userDirectory); } // Path, Java 7 private static void printCurrentWorkingDirectory2() { String userDirectory = Paths.get("") .toAbsolutePath() .toString(); System.out.println(userDirectory); } // File("") private static void printCurrentWorkingDirectory3() { String userDirectory = new File("").getAbsolutePath(); System.out.println(userDirectory); } // FileSystems private static void printCurrentWorkingDirectory4() { String userDirectory = FileSystems.getDefault() .getPath("") .toAbsolutePath() .toString(); System.out.println(userDirectory); } }
Output
/home/favtuts/projects/core-java/java-io
/home/favtuts/projects/core-java/java-io
/home/favtuts/projects/core-java/java-io
/home/favtuts/projects/core-java/java-io
Normally, we use the System.getProperty("user.dir")
to get the current working directory.
2. Working Directory for JAR file?
Do not use System.getProperty("user.dir")
, File
or Path
to access a file that is inside a JAR
file, it is not going to work. Instead, we should use getClassLoader().getResourceAsStream()
.
// get a file from the resources folder, root of classpath in JAR private InputStream getFileFromResourceAsStream(String fileName) { // The class loader that loaded the class ClassLoader classLoader = getClass().getClassLoader(); InputStream inputStream = classLoader.getResourceAsStream(fileName); // the stream holding the file content if (inputStream == null) { throw new IllegalArgumentException("file not found! " + fileName); } else { return inputStream; } }
Note
The above code is extracted from this Read a file from resources folder. Refer to example 2 for accessing a file that is inside a JAR file.
Download Source Code
$ git clone https://github.com/favtuts/java-core-tutorials-examples
$ cd java-io/howto