Java中的"user.dir"属性 - 它究竟是什么意思?

129
我想在我的单元测试中使用user.dir目录作为基本目录(该目录创建了许多文件)。这个属性指向当前的工作目录(例如由'cd'命令设置)是正确的吗?

2
如https://dev59.com/w3RA5IYBdhLWcg3wwwvD#840229所述,请记住,`-Duser.dir`标志会影响`File`对象(如果它们没有给出完整路径),但不会影响`FileOutPutStream`对象。如果您想确保两者的默认目录匹配,则应在启动Java之前进行`cd`操作。 - Seldom 'Where's Monica' Needy
4个回答

182

这是运行java时的目录,也就是启动JVM的目录。它不一定在用户的主目录中,可以是任何用户有权限运行Java的地方。

所以如果你进入/somedir目录,然后运行程序,user.dir将会是/somedir

另一个属性user.home指的是用户主目录,例如/Users/myuser/home/myuserC:\Users\myuser

此处查看系统属性及其描述列表。


已更正。user.dir怎么样? - johnny-b-goode
3
发帖之前我已经阅读过了。但是“用户工作目录”不是最好的解释,希望你同意。 - johnny-b-goode
这是否意味着,在所有Java版本的Tomcat配置中,如果user.dir指向/usr/share/tomcat,并且在配置中添加类似于file:./config的内容,则它将始终指向/usr/share/tomcat/config - Marcin Kapusta

8

8

通常这是你的应用程序(Java)启动的目录(工作目录)。 “通常”是因为它可以更改,例如当您使用 Runtime.exec(String [] cmdarray,String [] envp,File dir)运行应用程序时。


Maven系统仅在junit测试执行期间需要一个值。 - johnny-b-goode
2
当您在MAC上更改它时,会破坏像这个测试 https://stackoverflow.com/questions/45130661/user-dir-property-broken-on-osx-jdk-1-8-0-111-how-about-other-os-versions :( :( - Dean Hiller

6

System.getProperty("user.dir")获取当前项目工作区的目录或路径。


它通常获取当前工作目录,就像您从pwd命令中获取的那样,但是如果您使用例如mvn -f /path/to/project运行,Maven将在运行测试之前在内部有效地cd /path/to/project - rjmunro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接