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) {
- String s = currentFile.getName().toLowerCase();
- if (currentFile.isDirectory()) {
- findFiles(currentFile.getAbsolutePath());
- } else {
- if (s.matches("^.*?\\.(txt|pdf|doc|docx|html|htm|xml|djvu|djv|rar|rtf)$")) {
- 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() {
- }
- @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;
- int matches = 0;
- try {
- scanner = new Scanner(file);
- } catch (FileNotFoundException e) {
- System.out.println("File Not Found.");
- e.printStackTrace();
- }
- while (scanner.hasNext())
- if (scanner.next().equals(whatFind)) {
- matches++;
- }
- if (matches > 0) {
- String myStr = String.format(
- "File: %s - and the number of matches " + "is: %d",
- file.getAbsolutePath(), matches);
- System.out.println(myStr);
- }
- }
- // 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 (InterruptedException e) {
- System.out.println("Interrupted.");
- e.printStackTrace();
- } catch (IOException | RuntimeException e) {
- System.out.println("Wrong input!");
- e.printStackTrace();
- }
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- long startTime = System.currentTimeMillis();
- new FileScan().askUserPathAndWord();
- long stopTime = System.currentTimeMillis();
- long elapsedTime = stopTime - startTime;
- System.out.println("\nRuntime time " + elapsedTime + " milliseconds.");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement