2015-02-06 63 views
4

給定FilePath目錄對象,如何檢查它是否是符號鏈接,以及如何將其解析爲實際目錄?在Java中解析目錄符號鏈接

我試過File.getCannonicalFile(),Files.isSymbolicLink(Path)和許多其他方法,但他們都沒有工作。有趣的是Files.isDirectory(Path)返回false,而Files.exists(Path)爲真。 java將符號鏈接視爲文件而不是目錄?

+0

那麼爲什麼'Files.isSymbolicLink'不工作?你在做什麼操作系統?無論如何,在Linux上工作得很好。 – Makoto 2015-02-06 18:07:39

+0

「它們都不起作用」< - 這非常模糊。在這種情況下,java.nio.file才起作用。請顯示你的代碼。 – fge 2015-02-06 18:09:52

回答

7

如果要完全解決Path指向的實際內容,使用.toRealPath()

final Path realPath = path.toRealPath(); 

這將解決所有符號鏈接等

然而,因爲這可能會失敗(例如,符號鏈接無法解析),您必須在這裏處理IOException

因此,如果你想測試一個符號鏈接指向一個是否存在目錄,你必須做的:

Files.isDirectory(path.toRealPath()); 

注意一個微妙之處約Files.exists():默認情況下,它遵循符號鏈接

這意味着,如果你有一個符號鏈接作爲path,其目標不存在,那麼:

Files.exists(path) 

將返回FALSE;但是這個:

Files.exists(path, LinkOption.NOFOLLOW_LINKS) 

將返回TRUE。

在「Unix的說法」中,這是stat()lstat()之間的差異。