JDK 7 java.nio.file isSymbolicLink()行为
我试图在JDK 7(java.nio.file)中使用FileWalkTree()方法。 为了实现我自己的FileVisitor,我通过扩展SimpleFileVisitor创建了一个CustomFileVIsitor类 在这个CustomFileVIsitor类中。。。。我正在覆盖函数visitFileJDK 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)
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)代码>现在它返回的文件在这两种情况下都是符号链接。。。。。。。