在 Java 中,要遍歷一個文件夾下的全部文件(包括子文件夾),有如下幾種方式(或者叫工具)。 html
經過 JDK 的 java.io.File 類的 listFiles() 方法,本身寫代碼,經過遞歸遍歷目錄及子目錄的文件: java
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);
}
}
}
|
1
|
List<File> list = org.codehaus.plexus.util.FileUtils.getFiles(dir,null,null);
|
1
2
3
4
5
|
Files.fileTreeTraverser().breadthFirstTraversal(dir).filter(newPredicate<File>(){
publicbooleanapply(File input) {
returninput.isFile();
}
});
|
1
|
Collection<File> files = org.apache.commons.io.FileUtils.listFiles(dir,null,true);
|
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 7 NIO.2 方式遍歷文件是最快的,其次是經過 java.io.File 的listFiles() 方法。 apache
其實這個結果也是預料中的: oracle
mvn compile mvn exec:java運行結果以下: