Java多线程查找指定文件夹下包含指定关键字的文件数量(线程池版)

xiaoxiao2021-02-27  162

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; } } }
转载请注明原文地址: https://www.6miu.com/read-14481.html

最新回复(0)