2016-06-27 67 views
1

方法java.nio.file.Path.relativize()將拋出IllegalArgumentException一些參數。測試Path.relativize()是否會成功?

如果只有一個路徑具有根分量,則無法構建相對路徑。如果兩個路徑都有一個根組件,那麼如果可以構建一個相對路徑,它就是實現相關的。

例如,在Windows上,如果兩個參數指向不同驅動器上的路徑,則該方法可能會失敗。

是否有一個操作系統中立的方式來測試一個特定的參數是否合法,之前調用Path.relativize(),避免依賴異常處理非特殊情況?

回答

2

它說這是「依賴於實現」,所以不,但作出一些假設,你可以檢查它們是否共享相同的根和文件系統。

getRoot()如果路徑沒有根分量,則返回null,否則返回類似於Linux的OS的/,例如適用於Windows的C:\。如果其他路徑具有不同的根(例如D:\),則relativize()將失敗。

因此,如果兩個對象Path用於同一FileSystem,並且兩個或者是相對的(getRoot()返回null),或者兩者具有相同的根組件,relativize()應該正常工作。

不完美的解決方案,因爲我們不知道「執行」認爲什麼,但足夠接近?

相關問題