我有以下File对象通过符号链接
指向目录File directory = new File("/path/symlink/foo/bar");
String[] files = directory.listFiles();
listFiles()返回null,这是因为符号链接?如果是的话,如果我真的想使用包含符号链接的路径在列表中列出文件,我将如何进行此操作?
答案 0 :(得分:16)
根据我在谷歌搜索这个令人费解的行为时所看到的,Java要求您在其路径包含链接的.getCanonicalFile()
上调用File
,然后才能在其他文件操作中使用它。
所以:
File directory = new File("/path/symlink/foo/bar").getCanonicalFile();
String[] files = directory.listFiles();
答案 1 :(得分:3)
您可以阅读符号LINK
答案 2 :(得分:2)
..扩展@mickthompson建议的内容,使用NIO File library(> Java 7),您可以:
Path link = Paths.get("/path/symlink/foo/bar");
while (Files.isSymbolicLink(link)) {
link = Files.readSymbolicLink(link);
}
Path[] files = Files.list(link).toArray(size -> new Path[size]);
Path
很容易转换为File
,因此可以安全地保存所有旧的Java IO代码, @see Path#toFile()
。
答案 3 :(得分:0)
这是针对3.0.1版本修复的。在发布之后,尝试一下,通过打开一个新错误,链接回this one以获取上下文,让我们知道它是否仍然是一个问题。