我正在运行一个简单的Java程序,其目录结构如下:
MyProject (A project in my Eclipse IDE)
'-- src
'-- Hello.java
Run Code Online (Sandbox Code Playgroud)
在Hello.java中,我打印'user.dir'系统属性的值.
System.out.println(System.getProperty("user.dir"));
Run Code Online (Sandbox Code Playgroud)
我班的编译文件存储在MyProject\bin文件夹中.
当我从Eclipse运行此类时(右键单击源文件并单击Run As-> Java Application),它会将路径打印到"MyProject"文件夹,即D:\Projects\Workspace\MyProject在控制台窗口中.
然后我使用命令窗口运行相同的程序.这是我在窗口上输入的内容:
D:\Projects\Workspace\MyProject\bin>java Hello
Run Code Online (Sandbox Code Playgroud)
和控制台上的输出是: D:\Projects\Workspace\MyProject\bin
bin 已添加到user.dir的先前值.
此外,为了检查更多,我这次在命令窗口的不同文件夹中执行了Java命令:
D:\Projects\Workspace\MyProject>java -classpath D:\Projects\Workspace\MyProject\bin Hello
Run Code Online (Sandbox Code Playgroud)
命令窗口的输出时间为: D:\Projects\Workspace\MyProject
当我在命令窗口中更改文件夹时,此值会更改,当我从Eclipse运行程序时,user.dir的值是项目文件夹.所以我想了解,推导'user.dir'价值的基础是什么?JVM如何决定user.dir的值应该是什么?
根据java.lang.System规范user.dir定义,该属性返回当前工作目录(即启动JVM时的当前目录):
user.dir用户当前的工作目录
我看到你的例子中没有任何矛盾.这里唯一不清楚的是该物业的名称.我不明白为什么他们选择把"用户"放在那里.
同样,如果您从完全不同的路径执行相同的Java程序,您将获得另一条路径作为结果.自己尝试一下:
c:
cd c:\
java -cp D:\Projects\Workspace\MyProject\bin Hello
Run Code Online (Sandbox Code Playgroud)
Eclipse在运行程序之前所做的事情类似于:
d:
cd d:\projects\workspace\myproject
java -cp d:\projects\workspace\myproject\bin Hello
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11807 次 |
| 最近记录: |