3

我正在尝试使用 JDK 7 (java.nio.file) 中的 FileWalkTree()方法。为了实现我自己的 FileVisitor,我通过扩展SimpleFileVisitor创建了一个CustomFileVIsitor类。

在这个CustomFileVIsitor类中....我重写了函数visitFile

             public FileVisitResult visitFile(Path file, BasicFileAttributes fileStats)
        throws IOException {
                              System.out.println("\t\tChecking Symbolic Link  " + Files.isSymbolicLink(file));
                      System.out.println("\t\tChecking Symbolic Link  " + fileStats.isSymbolicLink());
                         System.out.println("\t\tFile Size " + Files.size(file));
                     System.out.println("\t\tFile Size " + fileStats.size());
                             //Rest of the code
             } 

现在,为了测试这段代码,我创建了一个文件夹,然后向它添加了一个文件和一个符号链接(到文件)。

当我使用 FileWalkTree 执行类时,由 Files.isSymbolicLink(file) 和 fileStats.isSymbolicLink() 为符号链接生成的输出不同

输出如下所示:

            Checking Symbolic Link  true
            Checking Symbolic Link  false
            File Size 38
            File Size 38

为什么会这样?这是一个错误还是我在解释信息时遗漏了什么?

4

1 回答 1

4

我猜您正在通过类似于以下的调用获取文件属性

FileAttributes attrs = Files.readAttributes(path, FileAttributes.class);

如果是这样,您可能需要通过传入适当的LinkOption枚举来防止符号链接的解析,就像这样

FileAttributes attrs = Files.readAttributes(path, FileAttributes.class, NOFOLLOW_LINKS);

奇怪的是您已经解决了获取您的链接的问题FileAttributes,这可以解释为什么File报告它是符号链接而FileAttributes报告它不是符号链接。

于 2011-11-08T19:34:38.497 回答