在 Java 中,要遍历一个文件夹下的所有文件(包括子文件夹),有以下几种方式(或者叫工具)。
通过 JDK 的 java.io.File 类的 listFiles() 方法,自己写代码,通过递归遍历目录及子目录的文件:
static Collection<File> listFiles(File root){
List<File> files = new ArrayList<File>();
listFiles(files, root);
return files;
}
static void listFiles(List<File> files, File dir){
File[] listFiles = dir.listFiles();
for(File f: listFiles){
if(f.isFile()){
files.add(f);
}else if(f.isDirectory()){
listFiles(files, f);
}
}
}
List<File> list = org.codehaus.plexus.util.FileUtils.getFiles(dir, null, null);
Files.fileTreeTraverser().breadthFirstTraversal(dir).filter(new Predicate<File>(){
public boolean apply(File input) {
return input.isFile();
}
});
Collection<File> files = org.apache.commons.io.FileUtils.listFiles(dir, null, true);
final List<File> files = new ArrayList<File>();
SimpleFileVisitor<Path> finder = new SimpleFileVisitor<Path>(){
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
files.add(file.toFile());
return super.visitFile(file, attrs);
}
};
java.nio.file.Files.walkFileTree(path, finder);
经过运行时间对比,Java 7 NIO.2 方式遍历文件是最快的,其次是通过 java.io.File 的 listFiles() 方法。
其实这个结果也是预料中的:
mvn compile mvn exec:java运行结果如下:

| Source |
|