How to get current working directory in Java?
One way would be to use the system property System.getProperty("user.dir");
this will give you "The current working directory when the properties were initialized". This is probably what you want. to find out where the java
command was issued, in your case in the directory with the files to process, even though the actual .jar file might reside somewhere else on the machine. Having the directory of the actual .jar file isn't that useful in most cases.
The following will print out the current directory from where the command was invoked regardless where the .class or .jar file the .class file is in.
public class Test
{
public static void main(final String[] args)
{
final String dir = System.getProperty("user.dir");
System.out.println("current dir = " + dir);
}
}
if you are in /User/me/
and your .jar file containing the above code is in /opt/some/nested/dir/
the command java -jar /opt/some/nested/dir/test.jar Test
will output current dir = /User/me
.
You should also as a bonus look at using a good object oriented command line argument parser.
I highly recommend JSAP, the Java Simple Argument Parser. This would let you use System.getProperty("user.dir")
and alternatively pass in something else to over-ride the behavior. A much more maintainable solution. This would make passing in the directory to process very easy to do, and be able to fall back on user.dir
if nothing was passed in.
How to get the execution directory path in java
As Jarrod Roberson states in his answer here:
One way would be to use the system property
System.getProperty("user.dir");
this will give you "The current
working directory when the properties were initialized". This is
probably what you want. to find out where thejava
command was
issued, in your case in the directory with the files to process, even
though the actual .jar file might reside somewhere else on the
machine. Having the directory of the actual .jar file isn't that
useful in most cases.The following will print out the current directory from where the
command was invoked regardless where the .class or .jar file the
.class file is in.public class Test
{
public static void main(final String[] args)
{
final String dir = System.getProperty("user.dir");
System.out.println("current dir = " + dir);
}
}
if you are in
/User/me/
and your .jar file containing the above code
is in/opt/some/nested/dir/
the commandjava -jar
will output
/opt/some/nested/dir/test.jar Testcurrent dir =
.
/User/meYou should also as a bonus look at using a good object oriented
command line argument parser. I highly recommend JSAP, the Java
Simple Argument Parser. This would let you use
System.getProperty("user.dir")
and alternatively pass in something
else to over-ride the behavior. A much more maintainable solution.
This would make passing in the directory to process very easy to do,
and be able to fall back onuser.dir
if nothing was passed in.
Example : GetExecutionPath
import java.util.*;
import java.lang.*;
public class GetExecutionPath
{
public static void main(String args[]) {
try{
String executionPath = System.getProperty("user.dir");
System.out.print("Executing at =>"+executionPath.replace("\\", "/"));
}catch (Exception e){
System.out.println("Exception caught ="+e.getMessage());
}
}
}
output for the above will be like
C:\javaexamples>javac GetExecutionPath.jav
C:\javaexamples>java GetExecutionPath
Executing at =>C:/javaexamples
Change the Current Working Directory in Java
I'm pretty sure you can't modify the current process' working directory. Instead you can use the File(String, String)
constructor which creates a new File
instance from a parent pathname string and a child pathname string.
Changing the current working directory in Java?
There is no reliable way to do this in pure Java. Setting the user.dir
property via System.setProperty()
or java -Duser.dir=...
does seem to affect subsequent creations of Files
, but not e.g. FileOutputStreams
.
The File(String parent, String child)
constructor can help if you build up your directory path separately from your file path, allowing easier swapping.
An alternative is to set up a script to run Java from a different directory, or use JNI native code as suggested below.
The relevant OpenJDK bug was closed in 2008 as "will not fix".
How to list the files in current directory?
Maybe the dot notation for current folder is incorrect?
Print the result of File.getCanonicalFile()
to check the path.
Can anyone explain to me why src isn't the current folder?
Your IDE is setting the class-path when invoking the JVM.
E.G. (reaches for Netbeans) If you select menus File
| Project Properties (all classes)
you might see something similar to:
It is the Working Directory
that is of interest here.
How to change current directory in JAVA?
You cannot re-assign the default working directory of your process - it is given to your program at JVM's start-up, and does not change throughout the lifetime of the program.
In order to evaluate a relative path, construct an absolute path from the path of the origin (the XML file), a file path separator, and the relative path:
String xmlFilePath = "c:\\temp\\xml\\my_file.xml";
String relativePath = "..\\resources\\file.ico";
String resourcePath = "c:\\temp\\xml\\..\\resources\\file.ico";
Java will interpret paths like that as "c:\\temp\\resources\\file.ico"
.
Related Topics
Compile and Execute a Jdk Preview Feature with Maven
How to Get a Unicode Character's Code
Registering Multiple Keystores in Jvm
How to Find and Kill Running Win-Processes from Within Java
When to Use Atomicreference in Java
Abstractmethoderror Using Uribuilder on Jax-Rs
Use Custom Manifest File and Permission in Unity
Understanding Java.Util.Calendar Week_Of_Year
If(False) VS. While(False): Unreachable Code VS. Dead Code
Spring Crudrepository Findbyinventoryids(List<Long> Inventoryidlist) - Equivalent to in Clause
How to Convert/Parse from String to Char in Java
This: Cannot Use This in Static Context
How to Get Whole and Fractional Parts from Double in Jsp/Java
Lambda Expression and Method Overloading Doubts
How to Execute Multiple SQL Statements from Java