/*
使用fork/join的异步用法演示不要求返回值
遍历指定的目录,包含了子目录,寻找指定类型的文件
*/
public class FindDirectory {
// public static List<File> fileList = new ArrayList<File>();
/*
不要求返回值的情况
*/
static class MyTask extends RecursiveAction {
File dir;//表示进行查询的目录
public MyTask(File path) {
this.dir = path;
}
@Override
protected void compute() {
ArrayList<MyTask> subTaskLists = new ArrayList<>();
/*
如果是目录,继续进行拆分
*/
if (dir != null) {
if(dir.isDirectory()) {
//所有任务的列表
//展示目录下面的文件
File[] files = dir.listFiles();
//有可能外表是一个目录,但是里面却没有一个文件
if (files!=null) {
for (File file : files) {
MyTask subTask = new MyTask(file);
subTaskLists.add(subTask);
}
if (!subTaskLists.isEmpty()) {
for (MyTask subTaskList : invokeAll(subTaskLists)) {
subTaskList.join();
}
}
}
}else{
//进行筛选
boolean matches = dir.getAbsolutePath().endsWith("txt");//判断是不是txt文件
if (matches) {
System.out.println("文件:"+dir.getName());
}
}
}
}
}
public static void main(String[] args) {
ForkJoinPool pool = new ForkJoinPool();
String path = "D:/";
File file = new File(path);
MyTask myTask = new MyTask(file);
pool.execute(myTask);
myTask.join();
}
}
使用fork/join的异步方式遍历某个目录查找指定文件
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 需求:利用Fork/Join框架来统计某个字符串在某个文件夹的文件中出现的次数。主要用到的技术点:JDK8的Str...
- 我想删掉非docx文件,可以将所有文件都复制到一个目录下,再到此目录下执行删除操作,就可以提取所有docx的文件啦...