我有一段代码,并且很难理解这种递归模式。
private void indexDirectory(IndexWriter indexWriter, File dataDirectory,
String suffix) throws IOException {
System.out.println("Data directory before: " + dataDirectory.getName());
File[] files = dataDirectory.listFiles();
for (File file : files) {
System.out.println("File name : " + file.getName());
if (file.isDirectory()) {
indexDirectory(indexWriter, file, suffix);
} else {
indexFileWithIndexWriter(indexWriter, file, suffix);
}
}
System.out.println("Data directory : " + dataDirectory.getName());
}
dataDirectory 包含一个目录的路径,其中包含多个子目录和文件。
所以 files[] 数组看起来像,
C:\projects\test\.classpath,
C:\projects\test\.project,
C:\projects\test\.settings,
C:\projects\test\build,
C:\projects\test\build.xml,
C:\projects\test\dist,
C:\projects\test\src,
C:\projects\test\WebContent
.classpath和.project是文件,而.settings是一个包含 4 个文件的目录。因此,当第三次迭代.settings目录被调用时,其中包含 4 个文件。因为 .settings 是一个目录,所以 file.isDirectory是真实 的,并且相同的方法 (indexDirectory) 将使用最新的参数值调用。所以dataDirectory值被.settings取代。当代码执行进入循环时,它将转到else部分,因为它在.settings目录中找到了文件。
一旦它迭代了 4 次(因为它只有 4 个文件),它应该完成循环。
但奇怪的是 dataDirectory值被它所拥有的旧值替换,并且它开始调用数组中先前存在的下一项(即构建目录)。
有人可以解释我为什么会这样,而没有完成循环..我希望我解释清楚,如果没有请问我。
非常感谢。