您的位置:首页 > 编程语言 > Java开发

2.多线程查找目录下所有包含关键字的文件名

2016-12-07 12:56 375 查看
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");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐