我正在尝试在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
为什么会这样?这是一个错误还是在解释信息时我缺少什么?
答案 0 :(得分:4)
我猜你是通过类似
的调用获取文件属性的FileAttributes attrs = Files.readAttributes(path, FileAttributes.class);
如果是这样,您可能需要通过传入适当的LinkOption
枚举来阻止符号链接的解析,如此
FileAttributes attrs = Files.readAttributes(path, FileAttributes.class, NOFOLLOW_LINKS);
您已经解决了获取FileAttributes
的链接的问题,这可以解释为什么File
报告它是符号链接,而FileAttributes
报告它不是符号链接。