【问题标题】:Why System.getProperty("home.dir") returns null [duplicate]为什么 System.getProperty("home.dir") 返回 null [重复]
【发布时间】:2017-01-11 20:07:27
【问题描述】:

我不明白为什么 System.getProperty("home.dir") 返回 null 而不是当前工作目录。

我在 Ubuntu 16.04 上使用 Eclipse Mars2.0 IDE。我想,这与我使用的 IDE 或操作系统版本无关。

package test;

public class testing {
    public static void main (String args[])
    {
        System.out.println(System.getProperty("home.dir"));
    }

}

我希望得到此代码的回报,例如 /home/[user]/Workspace/test

【问题讨论】:

  • 如何去掉上面那个蓝框:“This question has already answers here:” 答案是错误的,用户主目录与工作目录是不同的概念。

标签: java


【解决方案1】:

Home.dir 不是此处指定的 java 属性:

https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html

如果工作目录是指用户工作目录,那么 user.home 应该可以工作。

例子:

    System.out.println(System.getProperty("user.home"));

输出:

C:\Users\User

如果您指的是 .jars 工作目录,那么我认为不存在这样的属性。 而是使用:

    your_class.class.getProtectionDomain().getCodeSource().getLocation().getPath(); 

这将返回一个字符串,指定 jar 当前所在的位置。

例子:

    System.out.println(new File(**TestLighting.class.getProtectionDomain().getCodeSource().getLocation().getPath()**));

(new File() 是为了得到正确的格式,它是/C:/...)

输出:

C:\Users\User\Documents\Java\Netbeans\Engine\build\test\classes

(这是运行 jar 的路径)

如果 home.dir 是系统环境变量,那么您将使用 System.getenv()

【讨论】:

  • 我其实需要初始化应用的绝对路径
  • 如你运行的 jar 所在的位置?如果是这样,那么这就是我所说的 .jars 工作目录。如果不是,请举例说明
  • 谢谢,我还加了一个例子,我相信我的第二个建议是'your_class.class.getProtectionDomain().getCodeSource().getLocation().getPath();'是您正在寻找的正确的。
  • 是的,这种解决方法有效。谢谢。但是,我无法弄清楚为什么 System.getProperty("home.dir") 首先不起作用。
  • Home.dir 不是系统属性。看看我放在那里的链接。它显示所有系统属性。
猜你喜欢
  • 2011-08-03
  • 1970-01-01
  • 2011-02-07
  • 2021-07-27
  • 2011-06-03
  • 2019-11-17
  • 2017-09-27
  • 2017-01-02
  • 1970-01-01
相关资源
最近更新 更多