为什么NIO.2 FileVisitor类型是通用的?

Vla*_*eev 12 java generics nio nio2

我正在研究Java NIO.2及其文件操作,目前我正在使用filetree-walking函数和类.

NIO.2 FileVisitorAPI非常棒,很遗憾,最近才将这种东西添加到Java SE中,而不是十年前.然而,有些东西让我感到困扰:制作FileVisitor界面通用的重点是什么?

网上的每个例子都显示了如何使用它,Files.walkFileTree()这意味着我们正在使用FileVisitor<Path>类型.但我只是看不到任何用于此接口的用途Path.好吧,有可能用它FileVisitor来走其他类型的树(内存中的那些?),但这感觉不对:这个接口和相关的类在语义上与文件绑定了非常具体的名称,还有FileVisitor方法扔IOException秒.

那么,参数化FileVisitor类型有什么原因吗?

Old*_*eon 5

你用GitHub吗?这将是一个使用FileVisitorGitHub实现API 的绝佳机会,它允许您探索/可视化GitHub项目.就此而言,几乎任何SCC系统都可以使用不同的类作为文件定位器

如何使用FileVisitor<ZipEntry>for遍历zip文件.

如果API可能与多个对象一起使用作为其目标,那么将其设置为通用是有意义的.我认为不要把它变成一般是错误应该被认为是愚蠢的.


nos*_*sid 5

使用泛型,相同的接口可用于其他类型的路径.如下面(简化的)代码片段所示,该接口适用于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);
    }
}
Run Code Online (Sandbox Code Playgroud)