为什么user.dir系统属性在Java中工作?

Geo*_*Geo 6 java filesystems chdir

我读过的几乎每篇文章都告诉我,你不能用Java创建chdir.这个问题的公认答案说你不能用Java做到这一点.

但是,这里有一些我尝试过的东西:

geo@codebox:~$ java -version
java version "1.6.0_14"
Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
Java HotSpot(TM) Client VM (build 14.0-b16, mixed mode, sharing)

这是我正在使用的测试类:

import java.io.*;

public class Ch {
    public static void main(String[] args) {
        System.out.println(new File(".").getAbsolutePath());
        System.setProperty("user.dir","/media");
        System.out.println(new File(".").getAbsolutePath());
    }
}
Run Code Online (Sandbox Code Playgroud)
geo@codebox:~$ pwd
/home/geo
geo@codebox:~$ java Ch
/home/geo/.
/media/.

请解释为什么这有效.从现在开始我可以使用它并期望它在所有平台上以相同的方式工作吗?

Jon*_*eet 10

仅仅因为new File(".")给出了理想的答案并不意味着它正在做你想要的.

例如,尝试:

new FileOutputStream("foo.txt").close();
Run Code Online (Sandbox Code Playgroud)

那最终会在哪里?在我的Windows框中,即使new File(".").getAbsolutePath()基于的移动user.dir,foo.txt也始终在原始工作目录中创建.这让我感到设定user.dir,使得new File(".") 参考当前的工作目录是自找麻烦.


01e*_*1es 6

引用:

user.dir属性在VM启动时设置为工作目录.您不应更改此属性或在命令行上设置它.如果这样做,那么您将看到一些不一致的行为,因为实现中假定user.dir是工作目录并且在VM的生命周期内它不会更改.

讨论就在这里