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

在这个 CustomFileVIsitor 类中。...我覆盖了函数,访问文件

             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

为什么会这样呢?是错误还是我在解释信息时缺少什么?

最佳答案

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

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

如果是这样,您可能需要通过传入适当的LinkOption枚举来阻止符号链接的解析,如下所示
FileAttributes attrs = Files.readAttributes(path, FileAttributes.class, NOFOLLOW_LINKS);

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

07-24 09:23