我正在研究JavaNIO.2及其文件操作,目前我正在处理文件遍历函数和类。
NIO.2 Java太棒了,遗憾的是,这种东西是最近才添加到Java中的,而不是十年前。然而,有件事让我有点烦恼:让FileVisitor接口泛化有什么意义呢?
网络上的每个示例都显示了如何将其与Files.walkFileTree()一起使用,这意味着我们使用的是FileVisitor<Path>类型。但是除了Path之外,我看不出这个接口对其他东西有什么用处。好吧,也许可以使用FileVisitor来遍历其他类型的树(内存中的树?),但这感觉不太对:这个接口和相关类在语义上与文件有非常特定的名称,FileVisitor的方法也抛出IOExceptions。
那么,参数化FileVisitor类型有什么原因吗?
发布于 2013-05-06 22:04:28
对于泛型,相同的接口可以用于其他类型的路径。如下面(简化的)代码片段所示,该接口在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);
}
}发布于 2013-05-06 22:03:54
你用GitHub吗?这将是一个非常好的机会,可以使用FileVisitor实现GitHub的API,从而允许您探索/可视化GitHub项目。因此,几乎任何SCC系统都可以使用不同的类作为文件定位器。
使用FileVisitor<ZipEntry>来遍历zip文件如何?
如果一个API以多个对象作为它的目标可能是可用的,那么使它成为通用的只是有意义的。我认为,而不是,使它成为通用的,应该被认为是愚蠢的错误。
https://stackoverflow.com/questions/16406474
复制相似问题