我有以下的File對象指向通過符號鏈接的目錄,文件無法在符號鏈接上工作的listFiles()?
File directory = new File("/path/symlink/foo/bar");
String[] files = directory.listFiles();
listFiles()返回null,是符號鏈接的,是因爲?如果是的話,如果我真的想要使用包含符號鏈接的路徑列出欄中的文件,我該如何解決這個問題?
我有以下的File對象指向通過符號鏈接的目錄,文件無法在符號鏈接上工作的listFiles()?
File directory = new File("/path/symlink/foo/bar");
String[] files = directory.listFiles();
listFiles()返回null,是符號鏈接的,是因爲?如果是的話,如果我真的想要使用包含符號鏈接的路徑列出欄中的文件,我該如何解決這個問題?
根據谷歌搜索,而這令人費解的行爲,我所看到的,Java要求你打電話.getCanonicalFile()
上一個File
其路徑包含一個鏈接,然後才能在其他文件操作使用。
所以:
File directory = new File("/path/symlink/foo/bar").getCanonicalFile();
String[] files = directory.listFiles();
你可以讀取符號LINK
..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()
。
這是固定的3.0.1版本。在發佈之後,請試一試,並通過打開一個新的錯誤,讓它回到this one的上下文來告訴我們它是否仍然是一個問題。
僅適用於(測試版)Java 7。 – Powerlord 2010-03-18 17:05:18