listFiles()的文件无法处理符号链接?

时间:2010-03-18 16:57:20

标签: java file-io symlink

我有以下File对象通过符号链接

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

listFiles()返回null,这是因为符号链接?如果是的话,如果我真的想使用包含符号链接的路径在列表中列出文件,我将如何进行此操作?

4 个答案:

答案 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以获取上下文,让我们知道它是否仍然是一个问题。