package BlockingQueueTest; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Scanner; import java.util.concurrent.BlockingQueue; public class SearchTask implements Runnable { /** * Constructor SearchTask * @param queue Coada, din case se scot filurile * @param keyword Key de cautare */ public SearchTask(BlockingQueue<File> queue, String keyword) { this.queue = queue; this.keyword = keyword; } public void run() { boolean done = false; try { while(!done) { File file = queue.take(); if(file == FileEnumerationTask.FICTIV) { queue.put(file); done = true; } else { search(file); } } } catch(IOException e) {e.printStackTrace();} catch(InterruptedException e) {} } /** * Se executa cautare fisierului cu keyword si se afiseaza toare cimpurile, * ce satisfac criteriului de cautare * @param file File de cautare */ public void search(File file) throws IOException { Scanner in = new Scanner(new FileInputStream(file)); int lineNumber = 0; while(in.hasNextLine()) { lineNumber++; String line = in.nextLine(); if(line.contains(keyword)) { System.out.printf("%s:%d:%s%n", file.getPath(),lineNumber,line); } } in.close(); } private BlockingQueue<File> queue; private String keyword; }