博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 遍历文件夹的几种方式及简单性能对比
阅读量:7210 次
发布时间:2019-06-29

本文共 1486 字,大约阅读时间需要 4 分钟。

hot3.png

在 Java 中,要遍历一个文件夹下的所有文件(包括子文件夹),有以下几种方式(或者叫工具)。

File.listFiles() 方法

通过 JDK 的 java.io.File 类的 listFiles() 方法,自己写代码,通过递归遍历目录及子目录的文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
staticCollection<File> listFiles(File root){
    List<File> files =newArrayList<File>();
    listFiles(files, root);
    returnfiles;
}
 
staticvoidlistFiles(List<File> files, File dir){
    File[] listFiles = dir.listFiles();
    for(File f: listFiles){
        if(f.isFile()){
            files.add(f);
        }elseif(f.isDirectory()){
            listFiles(files, f);
        }
    }
}

Plexus Utils 工具包

1
List<File> list = org.codehaus.plexus.util.FileUtils.getFiles(dir,null,null);

Google Guava 工具包

1
2
3
4
5
Files.fileTreeTraverser().breadthFirstTraversal(dir).filter(newPredicate<File>(){
    publicbooleanapply(File input) {
        returninput.isFile();
    }
});

Commons IO 工具包

1
Collection<File> files = org.apache.commons.io.FileUtils.listFiles(dir,null,true);

Java 7 NIO.2

1
2
3
4
5
6
7
8
9
10
finalList<File> files =newArrayList<File>();
SimpleFileVisitor<Path> finder =newSimpleFileVisitor<Path>(){
    @Override
    publicFileVisitResult visitFile(Path file, BasicFileAttributes attrs)throwsIOException {
        files.add(file.toFile());
        returnsuper.visitFile(file, attrs);
    }
};
 
java.nio.file.Files.walkFileTree(path, finder);

经过运行时间对比, 方式遍历文件是最快的,其次是通过 java.io.File 的listFiles() 方法。

其实这个结果也是预料中的:

  1. Java 7 肯定有性能上的改进,NIO.2 的性能应该好于之前的 IO 处理类
  2. listFiles 是 Java 6 及之前版本中的自带的方法,其它工具包应该都是在这个方法的基础上封装的,比该方法运行慢也是合理的

附录

  1. 本文完整代码下载:.
    mvn compilemvn exec:java
    运行结果如下:File walk test output
  2. 参考:

转载于:https://my.oschina.net/u/2450896/blog/617481

你可能感兴趣的文章
Python 初体验
查看>>
使用jenkins进行持续集成
查看>>
js算法入门(3)--递归
查看>>
免费的局域网文档协作办公方式—onlyoffice文档协作
查看>>
微信支付HTTPS服务器证书验证(PHP)
查看>>
前端笔试题面试题记录(上)
查看>>
webpack4升级指北
查看>>
springboot整合shiro使用shiro-spring-boot-web-starter
查看>>
Express4.x api 翻译(draft)
查看>>
我为什么晚上写代码?
查看>>
React+Redux开发实录(一)搭建工程脚手架
查看>>
我来阅读lodash源码——Math(一)
查看>>
Laravel 5.5 使用 Passport 实现 Auth 认证
查看>>
用python写通用restful api service(一)
查看>>
javascript this指针详解
查看>>
Hystrix:HystrixCollapser请求合并
查看>>
three.js 入门详解(一)
查看>>
Android基础之Java接口
查看>>
Angular开发实践(一):环境准备及框架搭建
查看>>
Vue2 源码漫游(二)
查看>>