以递归方式获取目录及其子目录中的所有文件

我试图获取目录及其子目录中的所有文件的列表。 我目前的递归方法如下:

private void printFiles(File dir) { for (File child : dir.listFiles()) { if (child.isDirectory()) { printFiles(child); } else if (child.isFile()) { System.out.println(child.getPath()); } } } printFiles(new File("somedir/somedir2")); 

但是,我希望有一种非递归方式(可能是现有的API调用)。 如果没有,这是最干净的方式吗?

您始终可以使用堆栈(对于DFS)或队列(对于BFS)使用迭代解决方案替换递归解决方案:

 private void printFiles(File dir) { Stack stack = new Stack(); stack.push(dir); while(!stack.isEmpty()) { File child = stack.pop(); if (child.isDirectory()) { for(File f : child.listFiles()) stack.push(f); } else if (child.isFile()) { System.out.println(child.getPath()); } } } printFiles(new File("abc/def.ghi")); 

FileUtils可能是最好的方法。 (链接问题的复制)仅发布,因此搜索此内容的人会看到它,并且可能不会阅读评论

编辑:要使用的方法Listfiles

从Java 8开始,您可以使用Files#walk在给定目录中递归列出所有文件和目录。 此外,如果只需要常规文件,可以应用像Files::isRegularFile这样的filter来过滤掉目录。

另一方面,如果您只需要列出给定目录而不是其子目录,则可以使用惰性方法Files#list ,它只会为您提供给定目录中的文件和目录。 您可以再次应用上述filter。