Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package task;
- import java.util.concurrent.*;
- import java.util.*;
- import java.io.*;
- class FolderScan implements Runnable {
- private String path;
- private BlockingQueue<File> queue;
- private CountDownLatch latch;
- private File endOfWorkFile;
- FolderScan(String path, BlockingQueue<File> queue, CountDownLatch latch,
- File endOfWorkFile) {
- this.path = path;
- this.queue = queue;
- this.latch = latch;
- this.endOfWorkFile = endOfWorkFile;
- }
- public FolderScan() { }
- @Override
- public void run() {
- findFiles(path);
- queue.add(endOfWorkFile);
- latch.countDown();
- }
- private void findFiles(String path) {
- try {
- File root = new File(path);
- File[] list = root.listFiles();
- for (File currentFile : list) {
- if (currentFile.isDirectory()) {
- findFiles(currentFile.getAbsolutePath());
- } else {
- if (currentFile.getName().toLowerCase().endsWith((".txt"))) {
- queue.put(currentFile);
- }
- }
- }
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- public class FileScan implements Runnable {
- private String whatFind;
- private BlockingQueue<File> queue;
- private CountDownLatch latch;
- private File endOfWorkFile;
- public FileScan(String whatFind, BlockingQueue<File> queue,
- CountDownLatch latch, File endOfWorkFile) {
- this.whatFind = whatFind;
- this.queue = queue;
- this.latch = latch;
- this.endOfWorkFile = endOfWorkFile;
- }
- public FileScan() { }
- Set<String> words = new HashSet<String>();
- int matches = 0;
- @Override
- public void run() {
- while (true) {
- try {
- File file;
- file = queue.take();
- if (file == endOfWorkFile) {
- break;
- }
- scan(file);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- latch.countDown();
- }
- private void scan(File file) {
- Scanner scanner = null;
- try {
- scanner = new Scanner(file);
- } catch (FileNotFoundException e) {
- System.out.println("FileNotFoundException.");
- e.printStackTrace();
- }
- while (scanner.hasNext()) {
- String word = scanner.next();
- words.add(word);
- }
- if (words.contains(this.whatFind)) {
- matches++;
- }
- String myStr = String.format("File: %s and the number of matches "
- + "is = %d", file.getAbsolutePath(), matches);
- System.out.println(myStr);
- matches = 0;
- }
- // ask user about input
- public void askUserPathAndWord() {
- BufferedReader bufferedReader = new BufferedReader(
- new InputStreamReader(System.in));
- String path;
- String whatFind;
- BlockingQueue<File> queue = new LinkedBlockingQueue<File>();
- try {
- System.out.println("Please, enter a Path and Word"
- + "(which you want to find):");
- System.out.println("Please enter a Path:");
- path = bufferedReader.readLine();
- System.out.println("Please enter a Word:");
- whatFind = bufferedReader.readLine();
- if (path != null && whatFind != null) {
- File endOfWorkFile = new File("GameOver.tmp");
- CountDownLatch latch = new CountDownLatch(2);
- FolderScan folderScan = new FolderScan(path, queue, latch,
- endOfWorkFile);
- FileScan fileScan = new FileScan(whatFind, queue, latch,
- endOfWorkFile);
- Executor executor = Executors.newCachedThreadPool();
- executor.execute(folderScan);
- executor.execute(fileScan);
- latch.await();
- System.out.println("Thank you!");
- } else {
- System.out.println("You did not enter anything");
- }
- } catch (IOException | RuntimeException e) {
- System.out.println("Wrong input!");
- e.printStackTrace();
- } catch (InterruptedException e) {
- System.out.println("Interrupted.");
- e.printStackTrace();
- }
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- new FileScan().askUserPathAndWord();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement