在Java中递归列出文件

在Java中递归列出文件

如何递归列出Java目录下的所有文件?框架提供任何实用工具吗?

我看到了很多令人讨厌的实现。但是没有一个是从框架或者尼欧


繁星点点滴滴
浏览 439回答 3
3回答

慕尼黑5688855

Java 8提供了一个很好的流来处理树中的所有文件。Files.walk(Paths.get(path))         .filter(Files::isRegularFile)         .forEach(System.out::println);这为遍历文件提供了一种自然的方式。因为它是一个流,所以您可以对结果执行所有良好的流操作,例如限制、分组、映射、提前退出等等。更新:我可以指出还有文件,查找这需要一个双预测如果您需要检查文件属性,这可能会更有效。Files.find(Paths.get(path),            Integer.MAX_VALUE,            (filePath, fileAttr) -> fileAttr.isRegularFile())         .forEach(System.out::println);请注意,虽然JavaDoc没有这样做,但是这个方法可能比文件.走它实际上是相同的,如果还在筛选器中检索文件属性,则可以观察到性能上的差异。最后,如果需要对属性进行筛选,请使用文件,查找,否则使用文件.走,主要是因为有超载,而且更方便。试验应要求,我提供了许多答案的性能比较。检查一下包含结果和测试用例的GitHub项目.

绝地无双

FileUtils有iterateFiles和listFiles方法。试试看。(来自公野)编辑:你可以检查这里不同方法的基准。看上去公域-io方法很慢,所以选择一些速度更快的方法。从这里开始(如有关系)

蛊毒传说

/准备运行import java.io.File;public class Filewalker {     public void walk( String path ) {         File root = new File( path );         File[] list = root.listFiles();         if (list == null) return;         for ( File f : list ) {             if ( f.isDirectory() ) {                 walk( f.getAbsolutePath() );                 System.out.println( "Dir:" + f.getAbsoluteFile() );             }             else {                 System.out.println( "File:" + f.getAbsoluteFile() );             }         }     }     public static void main(String[] args) {         Filewalker fw = new Filewalker();         fw.walk("c:\\" );     }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java