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

时间:2017-07-16 16:06:56

标签: java

我只有这个mac,我想知道这个问题是否存在于其他操作系统或者jdks上。此测试失败,其中第二行到最后一行验证绝对路径是否引用实际文件(并匹配第一个文件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());
}

1 个答案:

答案 0 :(得分:3)

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

  

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

     在jvm启动期间初始化的

“user.dir”应该用作   informative / readonly系统属性,尝试通过命令行自定义它   -Duser.dir = xyz将以实现dependend / unspecified行为结束。   当前的FileSystem实现在很大程度上取决于假设   我们没有“chdir”或“chdir”之类的功能(比如使用-Duser.dir = xyz)   这会将“当前用户目录”更改为不是一个jvm启动。   也就是说,FileIn / OutputStream的不一致行为确实是一个错误   行为(FileIn / OutputStream的open impl直接打开到naive open   由于提到的假设,没有咨询java File / FileSystem   以上)。

     

要更改当前实现以支持“customizable”user.dir   一个大问题,很多课程/变革线,只有我们相信它才会这样做   真的值得做。