我正在研究Java NIO.2及其文件操作,目前正在使用文件树遍历函数和类。
NIO.2 FileVisitor
API很棒,令人遗憾的是,这种东西仅在最近而不是十年前才被添加到Java SE中。但是,有些事情令我有些困扰:使FileVisitor
接口(interface)通用是什么意思?
网上的每个示例都展示了如何将其与Files.walkFileTree()
一起使用,这意味着我们正在使用FileVisitor<Path>
类型。但是除了Path
之外,我只是看不到此接口(interface)的任何用途。好吧,也许可以使用FileVisitor
遍历其他种类的树(内存中的树?),但这感觉并不对:此接口(interface)和相关类的语义上非常特定的名称与文件相关联,而且FileVisitor
'的方法抛出IOException
。
那么,是否有理由对FileVisitor
类型进行参数化?
最佳答案
使用泛型,相同的接口(interface)可用于其他类型的路径。如以下(简化的)代码片段所示,该接口(interface)可与java.io.File
配合使用:
FileVisitResult walk(File file, FileVisitor<File> visitor)
throws IOException
{
if (file.isDirectory()) {
visitor.preVisitDirectory(file, null);
for (File child : file.listFiles()) {
walk(child, visitor);
}
return visitor.postVisitDirectory(file, null);
} else {
return visitor.visitFile(file, null);
}
}