JDK 7 java.nio.file isSymbolicLink()行为

时间:2011-11-08 18:29:40

标签: java java.nio.file

我正在尝试在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(文件)和fileStats.isSymbolicLink()为符号链接生成的输出是不同的

输出如下:

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

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

1 个答案:

答案 0 :(得分:4)

我猜你是通过类似

的调用获取文件属性的
FileAttributes attrs = Files.readAttributes(path, FileAttributes.class);

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

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

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