在OSX jdk 1.8.0_111上打破了user.dir属性? 其他操作系统,版本怎么样?

我只有这个mac,我想知道这个问题是否存在于其他操作系统或jdks上。 此测试失败,其中第二行到最后一行validation绝对路径是否引用实际文件(并匹配第一个文件abs路径)但是f2.exists调用返回false,就像它不存在一样。

我对Windows和Linux很好奇,如果这也失败了?

@Test public void testUserDirProp() { File f = new File("src/test/resources/logback-test.xml"); //assert absolute path is correct Assert.assertEquals("/Library/Workflow/webpieces/core/core-util/src/test/resources/logback-test.xml", f.getAbsolutePath()); Assert.assertTrue(f.exists()); //NOW, change user.dir System.setProperty("user.dir", "/Library/Workflow/webpieces/core/core-util/src"); //Now, f2 is relative to NEW user.dir property File f2 = new File("test/resources/logback-test.xml"); //verify absolute path is still the full correct path for f2 and it is Assert.assertEquals("/Library/Workflow/webpieces/core/core-util/src/test/resources/logback-test.xml", f2.getAbsolutePath()); //since absolute path was correct, it should exist Assert.assertTrue(f2.exists()); } 

user.dir属性没有被破坏。 不支持设置它,并且不保证以任何特定方式运行。 请参阅http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4117557和链接的票证:

仔细考虑后,我们仍然不相信当前的行为可以/应该改变。 我们从未保证在任何给定时间都会查询“user.dir”,不幸的是jdk假设此属性不会更改。 理想情况下,我们会引入“只读”系统属性的概念,以防止此系统属性和其他系统属性中的不受支持的更改。

在jvm启动期间初始化的“user.dir”应该用作信息性/只读系统属性,尝试通过命令行自定义它-Duser.dir = xyz将最终执行dependend / unspecified行为。 当前的FileSystem实现在很大程度上取决于我们没有“chdir”或“chdir”之类的function(比如使用-Duser.dir = xyz),它会将“当前用户dir”更改为不是一个jvm启动。 也就是说,FileIn / OutputStream的不一致行为确实是一个错误的行为(FileIn / OutputStream的open impl直接打开直接打开而没有咨询java File / FileSystem,因为上面提到的假设)。

要更改当前实现以支持“可自定义”user.dir是一个大问题,很多类/更改行,只有在我们认为它真的值得做的时才这样做。