import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.Scanner;
class MyFileFilter implements FileFilter{
private String keywords;
public MyFileFilter(String keywords){
this.keywords = keywords;
}
@Override
public boolean accept(File pathname) {
// TODO Auto-generated method stub
if (pathname.isDirectory()){
return true;
}
else if (pathname.getName().contains(keywords)){
return true;
}
return false;
}
}
class MySearchTask extends Thread{
private File file;
private String keywords;
public MySearchTask(File file, String keywords){
this.file = file;
this.keywords = keywords;
}
public void search(File file){
File[] files = file.listFiles(new MyFileFilter(keywords));
if (files == null)
return;
for (File f : files){
if (f.isDirectory()){
search(f);
}
else{
System.out.println(f.getPath());
}
}
}
public void run(){
search(file);
}
}
public class TestDemo {
private static ArrayList<MySearchTask> list;
static{
list = new ArrayList<MySearchTask>(100);
}
public static void search(File file, String keywords){
File[] files = file.listFiles(new MyFileFilter(keywords));
if (files == null)
return;
for (File f : files){
if(f.isDirectory()){
MySearchTask myTask = new MySearchTask(f, keywords);
myTask.start();
list.add(myTask);
}
else{
System.out.println(f.getPath());
}
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
System.out.println("Input directory:");
String fileDir = scan.nextLine();
System.out.println("Input keywords:");
String keywords = scan.nextLine();
long begin = System.currentTimeMillis();
File file = new File(fileDir);
search(file, keywords);
try {
for (MySearchTask task : list){
task.join(); //将主线程添加到各个线程后面,使得各个子线程执行完后再执行主线程
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long end = System.currentTimeMillis();
System.out.println("spend time:" + (end-begin) + "ms");
}
2.多线程查找目录下所有包含关键字的文件名
最新推荐文章于 2021-02-03 22:43:54 发布