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 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.
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