Java 文件的listFiles()不在符号链接上工作?

Java 文件的listFiles()不在符号链接上工作?,java,file-io,symlink,Java,File Io,Symlink,下面的File对象通过符号链接指向一个目录 File directory = new File("/path/symlink/foo/bar"); String[] files = directory.listFiles(); listFiles()返回null,这是因为符号链接吗?如果是,如果我真的想使用包含符号链接的路径列出bar中的文件,我该怎么做呢?你可以阅读符号根据我在谷歌上看到的这个令人费解的行为,Java要求你调用.getCanonicalFile()在路径包含链接的文件上,然后

下面的File对象通过符号链接指向一个目录

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

listFiles()返回null,这是因为符号链接吗?如果是,如果我真的想使用包含符号链接的路径列出bar中的文件,我该怎么做呢?

你可以阅读符号

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

因此:


…扩展@mickthompson的建议,使用(>Java7),您可以:



很容易转换为,因此所有旧的Java IO代码都可以安全保存,@see.

这在3.0.1版本中是固定的。发布后,请尝试一下,打开一个新的bug,并将其链接回for context,让我们知道它是否仍然是您的问题。

注意,可能是符号链接链。因此,如果将
if
替换为
while
会更安全。
File directory = new File("/path/symlink/foo/bar").getCanonicalFile();
String[] files = directory.listFiles();
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]);