如何在Java中递归地列出目录下的所有文件?框架是否提供了任何实用工具
我看到了很多黑客的实现。但没有来自框架或nio
Java8提供了一个很好的流来处理树中的所有文件
文件.walk(路径.get(路径))
.filter(文件::isRegularFile)
.forEach(System.out::println);
这提供了一种遍历文件的自然方式。由于它是一个流,您可以对结果执行所有漂亮的流操作,例如限制、分组、映射、提前退出等
更新:我可能会指出还有Files.find需要aBiPredicate如果您需要检查文件属性,这可能会更有效
文件.find(路径).get(路径),
Integer.MAX_值,
(filePath,fileAttr)>;fileAttr.isRegularFile())
.forEach(System.out::println);
请注意,虽然JavaDoc回避了这种方法可能比Files.walk它实际上是相同的,如果您也在过滤器中检索文件属性,则可以观察到性能上的差异。最后,如果需要对属性进行筛选,请使用Files.find,否则使用Files.walk,主要是因为有重载,而且更方便
测试:根据要求,我提供了许多答案的性能比较。请查看包含结果和测试用例的Github项目