正如 Jarrod Roberson 在这里的回答中所说:
一种方法是使用系统属性
System.getProperty("user.dir");
,这将为您提供“初始化属性时的当前工作目录”。这可能就是你想要的。找出java
发出命令的位置,在您的情况下,在包含要处理的文件的目录中,即使实际的 .jar 文件可能位于机器上的其他位置。在大多数情况下,拥有实际 .jar 文件的目录并没有多大用处。
以下将打印出调用命令的当前目录,而不管 .class 文件位于何处 .class 或 .jar 文件。
public class Test
{
public static void main(final String[] args)
{
final String dir = System.getProperty("user.dir");
System.out.println("current dir = " + dir);
}
}
如果您在/User/me/
并且包含上述代码的 .jar 文件在/opt/some/nested/dir/
命令中,java -jar
/opt/some/nested/dir/test.jar Test
则将输出current dir =
/User/me
.
作为奖励,您还应该考虑使用一个好的面向对象的命令行参数解析器。我强烈推荐JSAP,Java 简单参数解析器。这将使您可以使用
System.getProperty("user.dir")
或传入其他内容来覆盖该行为。一个更易于维护的解决方案。这将使传递目录以进行处理变得非常容易,并且user.dir
如果没有传递任何内容,则能够回退。
示例: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());
}
}
}
上面的输出会像
C:\javaexamples>javac GetExecutionPath.jav
C:\javaexamples>java GetExecutionPath
Executing at =>C:/javaexamples