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

我有以下File对象通过符号链接指向目录,

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

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

根据我在谷歌搜索这个令人费解的行为时所看到的,Java要求您在其路径包含链接的File上调用.getCanonicalFile() ,然后才能在其他文件操作中使用它。

所以:

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

您可以阅读符号链接

..扩展@mickthompson建议的内容,使用NIO文件库 (> 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代码, Path#toFile()

这是针对3.0.1版本修复的。 在发布之后,尝试一下,通过打开一个新的bug来链接回这个上下文,让我们知道它是否仍然是一个问题。