我知道递归的基础知识,但在给定的代码中我很难理解流程。
请帮帮我...
public ArrayList<String> searchFolders(File fo) {
if (fo.isDirectory()) {
String internalNames[] = fo.list();
for (int i = 0; i < internalNames.length; i++) {
searchFolders(new File(fo.getAbsolutePath() + "\\"+ internalNames[i]));
path = fo.getAbsolutePath() + "\\" + internalNames[i];
}
}
if (fo.isFile()) {
alist.add(fo.toString());
}
return alist;
}
最佳答案
基本上,此代码获取目录的所有内容并将它们添加到全局变量 alist
。
你给它一个目录。 如果它是一个文件,则将其名称添加到列表中,然后该方法返回(文件不能有子文件夹)。
如果是文件夹,则列出文件夹中的所有内容:
String internalNames[] = fo.list();
然后对文件夹中的每个项目执行相同的搜索:
searchFolders(new File(fo.getAbsolutePath() + "\\"+ internalNames[i]));
因此,如果您当前正在搜索的项目是一个文件(如果 fo.getAbsolutePath() + "\\"+ internalNames[i]
是一个文件的目录),那么它只需将文件添加到全局 ArrayList。
否则,如果它是一个文件夹,它会像搜索它刚刚查看的文件夹一样搜索它,并列出该文件夹中的所有文件。
您似乎没有使用变量 path
。
当您返回 alist
时,您将返回到目前为止在该文件夹(及其子文件夹)中找到的所有文件。
您没有返回文件夹名称,因为 fo.isDirectory()
时,您没有将其名称添加到 alist
。
关于java - 了解递归流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11116157/