我只有这个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());
}
答案 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 一个大问题,很多课程/变革线,只有我们相信它才会这样做 真的值得做。