【发布时间】:2010-03-18 16:57:20
【问题描述】:
我有以下 File 对象通过符号链接指向一个目录,
File directory = new File("/path/symlink/foo/bar");
String[] files = directory.listFiles();
listFiles() 返回 null,这是因为符号链接吗?如果是,如果我真的想使用包含符号链接的路径列出 bar 中的文件,我将如何处理?
【问题讨论】:
我有以下 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();
【讨论】:
你可以阅读符号LINK
【讨论】:
..扩展@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()。
【讨论】:
if 替换为while 会更安全。
在 3.0.1 版本中已修复此问题。发布后,试一试,如果它仍然是您的问题,请打开一个新错误,链接回this one 以获取上下文。
【讨论】: