【问题标题】:Getting the current user's path rather than application path in java获取当前用户的路径而不是java中的应用程序路径
【发布时间】:2012-08-29 10:54:04
【问题描述】:

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

所以,当它运行时:

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

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

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

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

什么会导致他们的行为不同?

【问题讨论】:

  • 当前用户路径是指用户启动应用程序的位置,即他调用java -jar ./path/to/app/app.jar的位置?
  • 是的,我想要用户调用 jar 文件的目录。它似乎在一个小的独立应用程序中工作。不是大应用程序,即使我将代码插入到应用程序主体的第一行。

标签: java file command-line java-io filepath


【解决方案1】:

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

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

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

然后在您的应用程序中

String savedcwd = System.getProperty("savedcwd");

【讨论】:

  • 您是对的,您知道是否可以更改批处理文件,使其表现得好像应用程序是直接从用户目录调用而不是批处理文件所在的位置?我正在使用命令行解析器,我没有代码。文件路径用于许多不同的命令行参数,在不同的位置。我不想更改任何 java 代码。
  • 批处理文件将目录更改为 jar 文件的目录可能是有原因的。如果您将批处理文件更改为不将目录更改为 jar 文件的目录,您可能会破坏其他内容。现在是一个更容易修复的问题:需要"."==Current_Working_Directory 的Java 代码或需要"."==Main_JAR_dir 的批处理文件/Java 代码。 "." 不能同时指向两件事。这是一个或另一个。同样 AFAIK,一旦 JVM 启动,您就无法更改 "." 的值,需要在运行 java 之前通过 .bat/.sh (cd) 进行设置。
  • 我刚刚又看了一遍问题,在shell脚本中找不到目录被更改的地方。对不起,这对我来说都是新的,正在努力学习!感谢您的帮助!
  • 在大应用程序的批处理文件中查找“java”被调用的位置,在java 之前的那一行,输入命令:echo cwd=%cd% 并在之后的那一行(但仍然在@ 987654332@) 输入pause。然后批处理文件会在启动 java 之前告诉你 CWD 是什么。
  • 我明白,我唯一感到困惑的是脚本看起来很直。我没有看到对 cd 或 cad 的任何修改我查看了另一个具有类似脚本的命令行应用程序,它似乎收到了正确的工作目录。再次感谢!
【解决方案2】:

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

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

System.getProperty("user.home");

【讨论】:

    【解决方案3】:
    String currentDir = new File(".").getAbsolutePath();
    OR
    System.getProperty("user.dir")
    

    【讨论】:

    • getAbsolutePath();给了我同样的路径。
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2022-12-11
      • 1970-01-01
      • 1970-01-01
      • 2010-12-02
      • 2012-11-26
      • 2010-10-26
      • 1970-01-01
      • 1970-01-01
      • 2012-05-23
      相关资源
      最近更新 更多