【问题标题】:user.dir property broken on OSX jdk 1.8.0_111? how about other OS, versions?OSX jdk 1.8.0_111 上的 user.dir 属性损坏?其他操作系统,版本怎么样?
【发布时间】:2017-07-16 16:06:55
【问题描述】:

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

【问题讨论】:

    标签: java


    【解决方案1】:

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

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

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

    要更改当前实现以支持“可自定义” user.dir 是 很重要,很多类/变化线,只有在我们相信它的情况下才这样做 真的很值得。

    【讨论】:

    • 哦,谢谢!伙计,如果他们在设置异常时抛出异常肯定会很好,所以我们都知道。看起来他们应该快速失败,而不是让人们在奇怪的奇怪问题上浪费时间。哦,好吧。
    猜你喜欢
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 2012-07-30
    • 1970-01-01
    • 2021-10-12
    • 2011-11-17
    • 2012-02-05
    相关资源
    最近更新 更多