import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ThreadPoolExecutor;
public class ThreadPoolTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
File directory = new File("F:\\C++ Project");
String keyWords = "namespace";
ExecutorService pool = Executors.newCachedThreadPool();
Future<Integer> future = pool.submit(new PoolMatchCounter(directory, keyWords, pool));
try {
System.out.println(future.get() + " files match");
} catch (InterruptedException | ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
pool.shutdown();
ThreadPoolExecutor executor = (ThreadPoolExecutor)pool;
System.out.println("Largest Pool Size: " + executor.getLargestPoolSize());
}
}
class PoolMatchCounter implements Callable<Integer>{
private File directory;
private String keyWords;
private ExecutorService pool;
public PoolMatchCounter(File directory, String keyWords, ExecutorService pool) {
super();
this.directory = directory;
this.keyWords = keyWords;
this.pool = pool;
}
@Override
public Integer call() throws Exception {
// TODO Auto-generated method stub
File[] files = directory.listFiles();
List<Future<Integer>> result = new ArrayList<>();
int count = 0;
for(File f : files){
if(f.isDirectory()){
Future<Integer> future = pool.submit(new PoolMatchCounter(f, keyWords, pool));
result.add(future);
}else{
if(search(f)) ++count;
}
}
for(Future<Integer> f : result){
count += f.get();
}
return count;
}
public boolean search(File f) throws FileNotFoundException{
try(Scanner in = new Scanner(f)){
boolean found = false;
while(!found&in.hasNextLine()){
String line = in.nextLine();
if(line.contains(keyWords)){
found = true;
}
}
return found;
}
}
}
Java多线程查找指定文件夹下包含指定关键字的文件数量(线程池版)
最新推荐文章于 2021-06-19 13:27:03 发布