Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JDK 7 java.nio.file isSymbolicLink()行为_Java_Java.nio.file - Fatal编程技术网

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

JDK 7 java.nio.file isSymbolicLink()行为,java,java.nio.file,Java,Java.nio.file,我试图在JDK 7(java.nio.file)中使用FileWalkTree()方法。 为了实现我自己的FileVisitor,我通过扩展SimpleFileVisitor创建了一个CustomFileVIsitor类 在这个CustomFileVIsitor类中。。。。我正在覆盖函数visitFile public FileVisitResult visitFile(Path file, BasicFileAttributes fileStats)

我试图在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

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

我猜您是通过类似的调用获得文件属性的

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

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

您很可能已经解析了获取
FileAttributes
的链接,这将解释为什么
文件
报告它是一个符号链接,而
FileAttributes
报告它不是一个符号链接。

非常感谢。。。你是对的,我的初始代码是
Files.walkFileTree(toolVersionPath,EnumSet.of(FileVisitOption.FOLLOW\u链接),Integer.MAX\u值,preScanVisitorObject)现在我改为
文件.walkFileTree(toolVersionPath,EnumSet.noneOf(FileVisitionOption.class),Integer.MAX_值,preScanVisitorObject)现在它返回的文件在这两种情况下都是符号链接。。。。。。。