我正在尝试在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
报告它不是一个符号链接。