为啥 System.getProperty("home.dir") 返回 null [重复]

Posted

技术标签:

【中文标题】为啥 System.getProperty("home.dir") 返回 null [重复]【英文标题】: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:” 答案是错误的,用户主目录与工作目录是不同的概念。 【参考方案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 不是系统属性。看看我放在那里的链接。它显示所有系统属性。

以上是关于为啥 System.getProperty("home.dir") 返回 null [重复]的主要内容,如果未能解决你的问题,请参考以下文章

System.getenv() 和 System.getProperty() 之间的区别 [重复]

关于System.getProperty("java.io.tmpdir");的输出,及System.getProperty();参数(转自扑球小猫)

系统变量之System.getenv()和System.getProperty()

系统变量之System.getenv()和System.getProperty()

System.getProperty System.getenv 区别 log4j取法

System.getProperty()获取系统的配置信息