我正在尝试在具有多个依赖项的巨型命令行应用程序中获取当前用户路径。每次都是“。”使用它,它给我应用程序路径(jar存在的地方),而不是当前用户路径(进行调用的地方)。
所以,当这个运行时:
File file = new File(".");
System.out.println(file.getCanonicalPath());
给我应用程序所在的路径。
但是当我创建一个单独的小应用程序时,使用相同的代码。从另一个目录调用jar,它提供当前用户路径。
我使用JSAP命令行解析器作为命令行参数,它的行为方式相同。怎么解决这个问题?我希望我的大应用程序获取当前用户路径,而不是应用程序路径。
什么会导致他们表现不同?
答案 0 :(得分:3)
我认为你会发现启动你的“大应用程序”的批处理文件(/ shell脚本)是在启动Java之前将目录更改为主jar文件的目录,这就是你的简单测试应用程序返回用户工作的原因大应用程序返回jar文件目录时new File(".")
的目录。
尝试在批处理文件中尽早存储用户的CWD,然后将其传递给Java:
set savedcwd=%cd%
... later on ...
java "-Dsavedcwd=%savedcwd%"
然后在你的申请中
String savedcwd = System.getProperty("savedcwd");
答案 1 :(得分:1)
http://www.mindspring.com/~mgrand/java-system-properties.htm
你想要“user.home”属性,比如
System.getProperty("user.home");
答案 2 :(得分:1)
String currentDir = new File(".").getAbsolutePath();
OR
System.getProperty("user.dir")
答案 3 :(得分:0)
1)如上所述,如果你想获得“当前目录”,一种方法是使用File(".").getAbsolutePath()
2)如果您想获取用户的$ PATH变量(或任何环境变量),请使用System.getenv()
: