2010-03-18 56 views
8

我有以下的File對象指向通過符號鏈接的目錄,文件無法在符號鏈接上工作的listFiles()?

File directory = new File("/path/symlink/foo/bar"); 
String[] files = directory.listFiles(); 

listFiles()返回null,是符號鏈接的,是因爲?如果是的話,如果我真的想要使用包含符號鏈接的路徑列出欄中的文件,我該如何解決這個問題?

回答

14

根據谷歌搜索,而這令人費解的行爲,我所看到的,Java要求你打電話.getCanonicalFile()上一個File其路徑包含一個鏈接,然後才能在其他文件操作使用。

所以:

File directory = new File("/path/symlink/foo/bar").getCanonicalFile(); 
String[] files = directory.listFiles(); 
0

..extending什麼@mickthompson建議,使用NIO File library(> Java 7中),您可以:

Path link = Paths.get("/path/symlink/foo/bar"); 
if (Files.isSymbolicLink(link)) { 
    link = Files.readSymbolicLink(link); 
} 

Path[] files = Files.list(link).toArray(size -> new Path[size]); 

Path很容易轉化爲File因此所有您的舊Java IO代碼可以安全地保留,@ seePath#toFile()

0

這是固定的3.0.1版本。在發佈之後,請試一試,並通過打開一個新的錯誤,讓它回到this one的上下文來告訴我們它是否仍然是一個問題。

相關問題