为了账号安全,请及时绑定邮箱和手机立即绑定

在Java中递归列出文件

在Java中递归列出文件

繁星点点滴滴 2019-06-17 15:47:51
在Java中递归列出文件如何递归列出Java目录下的所有文件?框架提供任何实用工具吗?我看到了很多令人讨厌的实现。但是没有一个是从框架或者尼欧
查看完整描述

3 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

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项目.


查看完整回答
反对 回复 2019-06-17
?
绝地无双

TA贡献1946条经验 获得超4个赞

FileUtilsiterateFileslistFiles方法。试试看。(来自公野)

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


查看完整回答
反对 回复 2019-06-17
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

/准备运行

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:\\" );
    }}


查看完整回答
反对 回复 2019-06-17
  • 3 回答
  • 0 关注
  • 438 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信