2017-07-16 43 views
0

我只有這個mac,我想知道這個問題是否存在於其他操作系統或jdks。在第二行到最後一行驗證絕對路徑引用真實文件(並匹配第一個文件abs路徑)時,此測試失敗,但f2.exists調用返回false,因爲它不存在。OSX jdk 1.8.0_111上的user.dir屬性損壞?其他操作系統版本如何?

我很好奇在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()); 
} 

回答

2

user.dir財產不壞。 設置它不受支持,並不保證以任何特定方式運行。請參閱http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4117557及相關門票:

經過慎重考慮,我們仍然不相信目前的行爲可以/應該改變。我們從未保證在任何給定時間都會查閱「user.dir」,不幸的是,jdk已經假設這個屬性不會改變。理想情況下,我們將介紹「只讀」系統屬性的概念,以防止在此係統屬性和其他系統屬性中發生不受支持的更改。

「user.dir來」,這是JVM啓動期間初始化,應該被用作 信息/只讀系統屬性,嘗試通過命令行來定製它 -Duser.dir = XYZ將在實施dependend結束/未指明的行爲。 當前的FileSystem實現很大程度上取決於假設 我們沒有類似功能的「chdir」或「chdir」(如使用-Duser.dir = xyz) 這會將「當前用戶目錄」更改爲不是一個jvm從...啓動。 也就是說,FileIn/OutputStream的不一致行爲確實是一個buggy 行爲(FileIn/OutputStream的打開impl直接打開 直接打開 沒有諮詢java文件/文件系統,因爲上面提到了 )。

要改變當前的實現來支持「可定製的」user.dir是 一個大問題,很多類/線的變化,只有這樣做,如果我們認爲它是真的值得做的 。

+0

哦,謝謝!男人,如果他們拋出異常,那麼當它被設置時,它肯定會很好,所以我們都知道這一點。看起來他們應該快速失敗,而不是讓人們浪費時間與奇怪的問題。好吧。 –

相關問題