什么是 SimpleFileVisitor 的非递归定义?

What is a non-recursive definition of SimpleFileVisitor?

Oracle 的 Java 文档在 https://docs.oracle.com/javase/7/docs/api/java/nio/file/SimpleFileVisitor.html 上有一个非常有用的 SimpleFileVisitor 定义:"a simple visitor of files with default behavior to visit all files and to re-throw I/O errors." 尽管如此,谁能解释一下访问文件的含义或者这有多么简单?

A FileVisitor is an object whose callback methods are invoked as a method such as Files.walkFileTree 遍历公共根目录下的整个文件层次结构。当遇到树中的每个文件或目录时,我们称其为“已访问”。此时,传递给 walk 方法的 FileVisitor 参数会调用一个或多个方法,具体取决于每个文件的性质。

documentation of SimpleFileVisitor 实际上将它与 FileVisitor 接口区分开来:

A simple visitor of files with default behavior to visit all files and to re-throw I/O errors.

Methods in this class may be overridden subject to their general contract.

SimpleFileVisitor 实现了FileVisitor 的每个方法。每个实现的方法returns一个FileVisitResult告诉walk算法继续遍历树;这就是 class javadoc 中“访问所有文件”的意思。传播任何 IOException,而不是捕获和抑制;这就是 class javadoc 中“重新抛出 I/O 错误”的意思。

“简单”部分意味着 SimpleFileVisitor 没有自己的功能。这是一个“空”class:每个方法除了允许文件树遍历继续之外什么都不做。

最后,class javadoc 说明了 class 的预期目的:subclasses 应该覆盖一个或多个方法。与所有面向对象的继承一样,subclass 应遵守每个方法以及每个继承的 class 和接口的书面契约 (javadoc)。