为啥 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()