1.ForkJoinPool进行文件夹所有文件的记录
static class MyRecursiveTask extends RecursiveTask<List<String>>{
private String pathStr;
public MyRecursiveTask(String pathStr) {
this.pathStr = pathStr;
}
@Override
protected List<String> compute() {
List<String> savePathAndFile = new ArrayList<>();
File homeDir = new File(pathStr);
if (homeDir.isDirectory()) {
for (File f : homeDir.listFiles()) {
if(f.isDirectory()){
MyRecursiveTask taskLeft = new MyRecursiveTask(f.getAbsolutePath());
taskLeft.fork();
savePathAndFile.addAll(taskLeft.join()) ;
}else{
savePathAndFile.add(f.getAbsolutePath());
}
}
}
return savePathAndFile;
}
}
执行线程
ForkJoinPool fkPool=new ForkJoinPool();
ForkJoinTask<List<String>> submit = fkPool.submit(new MyRecursiveTask("E:\\xxx\\xx"));
List<String> strings=null;
try {
strings = submit.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}finally {
fkPool.shutdown();
}
普通的递归方法如下
public static List<String> bfs(String dirPath){
List<String> savePathAndFile = new ArrayList<>();
File homeDir = new File(dirPath);
if (homeDir.isDirectory()) {
for (File f : homeDir.listFiles()) {
if(f.isDirectory()){
List<String> bfs = bfs(f.getAbsolutePath());
savePathAndFile.addAll(bfs);
}else{
savePathAndFile.add(f.getAbsolutePath());
}
}
}
return savePathAndFile;
}
main方法执行比较下时间如下,相同的文件目录,该目录下的文件数目为
556个文件的文件夹的递归遍历是比采用ForkJoinPool快速的