【问题标题】:listFiles() of File not working on symbolic links?文件的 listFiles() 不适用于符号链接?
【发布时间】:2010-03-18 16:57:20
【问题描述】:

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

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

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

【问题讨论】:

    标签: java file-io symlink


    【解决方案1】:

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

    所以:

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

    【讨论】:

      【解决方案2】:

      你可以阅读符号LINK

      【讨论】:

        【解决方案3】:

        ..扩展@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 会更安全。
        【解决方案4】:

        在 3.0.1 版本中已修复此问题。发布后,试一试,如果它仍然是您的问题,请打开一个新错误,链接回this one 以获取上下文。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-10-31
          • 1970-01-01
          • 2018-09-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-14
          相关资源
          最近更新 更多