1

我正在尝试在具有多个依赖项的巨型命令行应用程序中获取当前用户路径。每次一个“。” 使用时,它给了我应用程序路径(jar 所在的位置),而不是当前的用户路径(正在进行调用的位置)。

所以,当它运行时:

File file = new File(".");
System.out.println(file.getCanonicalPath());

给我应用程序所在的路径。

但是当我创建一个单独的小应用程序并使用相同的代码时。从不同的目录调用 jar,它给出了当前用户路径。

我将 JSAP 命令行解析器用于命令行参数,其作用方式相同。如何解决?我希望我的大应用程序获取当前用户路径,而不是应用程序路径。

什么会导致他们表现不同?

4

4 回答 4

3

我想您会发现启动“大型应用程序”的批处理文件(/shell 脚本)在启动 Java 之前将目录更改为主 jar 文件的目录,这就是为什么您的简单测试应用程序会暂时返回用户的工作new File(".")目录大应用程序返回 jar 文件的目录。

尝试在批处理文件中尽早存储用户的 CWD,然后将其传递给 Java:

set savedcwd=%cd%
... later on ...
java "-Dsavedcwd=%savedcwd%"

然后在您的应用程序中

String savedcwd = System.getProperty("savedcwd");
于 2012-09-04T18:26:33.580 回答
1

http://www.mindspring.com/~mgrand/java-system-properties.htm

你想要“user.home”属性,比如

System.getProperty("user.home");
于 2012-09-04T18:24:56.877 回答
1
String currentDir = new File(".").getAbsolutePath();
OR
System.getProperty("user.dir")
于 2012-09-04T18:26:24.100 回答
0

1)如上所述,如果要获取“当前目录”,一种方法是使用File(".").getAbsolutePath()

2) 如果要获取用户的 $PATH 变量(或任何环境变量),请使用System.getenv()

于 2012-09-04T18:29:39.170 回答