2017-02-15 127 views
3

如果symlink是對應於一個符號鏈接文件對象,則:如何讀取斷開的符號鏈接指向的路徑?

File target = symlink.getCanonicalPath(); 

…成功返回它指向的目標。 Paths#toRealPath()也適用於相同的情況。

但是,如果符號鏈接斷開(懸擺),則上述兩個API均無法返回代表它指向的(不存在的)事件的File(或Path)。

我正在寫一個工具,需要能夠讀取這些值,即使對於懸掛符號鏈接。我用什麼API來獲取符號鏈接指向的文件或目錄(不管符號鏈接是正確還是破壞)?

更新

基於接受的答案,可以使用獲得的符號鏈接的目標(甚至破一個):

Path target = Files.readSymbolicLink(Paths.get("/some/directory/symlink")); 

…如果target是那麼相對的,你可以去參考它的基礎上放置符號本身是做找到位置的內容:

Paths.get("/some/directory/symlink").resolveSibling(".").resolve(target); 

回答

4

您可以使用Java的NIO文件系統API:

Path target = Files.readSymbolicLink(Paths.get("/symlink")); 

Java documentation規定「鏈接的目標不需要存在」。