Advertisement
nazar_art

FileScan new

Feb 25th, 2013
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package task;
  2.  
  3. import java.util.concurrent.*;
  4. import java.util.*;
  5. import java.io.*;
  6.  
  7. class FolderScan implements Runnable {
  8.  
  9.     private String path;
  10.     private BlockingQueue<File> queue;
  11.     private CountDownLatch latch;
  12.     private File endOfWorkFile;
  13.  
  14.     FolderScan(String path, BlockingQueue<File> queue, CountDownLatch latch,
  15.             File endOfWorkFile) {
  16.         this.path = path;
  17.         this.queue = queue;
  18.         this.latch = latch;
  19.         this.endOfWorkFile = endOfWorkFile;
  20.     }
  21.  
  22.     public FolderScan() {
  23.     }
  24.  
  25.     @Override
  26.     public void run() {
  27.         findFiles(path);
  28.         queue.add(endOfWorkFile);
  29.         latch.countDown();
  30.     }
  31.  
  32.     private void findFiles(String path) {
  33.  
  34.         try {
  35.             File root = new File(path);
  36.             File[] list = root.listFiles();
  37.             for (File currentFile : list) {
  38.                 String s = currentFile.getName().toLowerCase();
  39.                 if (currentFile.isDirectory()) {
  40.                     findFiles(currentFile.getAbsolutePath());
  41.                 } else {
  42.                     if (s.matches("^.*?\\.(txt|pdf|doc|docx|html|htm|xml|djvu|djv|rar|rtf)$")) {
  43.                         queue.put(currentFile);
  44.                     }
  45.                 }
  46.             }
  47.         } catch (InterruptedException e) {
  48.             e.printStackTrace();
  49.         }
  50.  
  51.     }
  52. }
  53.  
  54. public class FileScan implements Runnable {
  55.  
  56.     private String whatFind;
  57.     private BlockingQueue<File> queue;
  58.     private CountDownLatch latch;
  59.     private File endOfWorkFile;
  60.  
  61.     public FileScan(String whatFind, BlockingQueue<File> queue,
  62.             CountDownLatch latch, File endOfWorkFile) {
  63.         this.whatFind = whatFind;
  64.         this.queue = queue;
  65.         this.latch = latch;
  66.         this.endOfWorkFile = endOfWorkFile;
  67.     }
  68.  
  69.     public FileScan() {
  70.     }
  71.  
  72.     @Override
  73.     public void run() {
  74.  
  75.         while (true) {
  76.             try {
  77.                 File file;
  78.                 file = queue.take();
  79.  
  80.                 if (file == endOfWorkFile) {
  81.                     break;
  82.                 }
  83.  
  84.                 scan(file);
  85.             } catch (InterruptedException e) {
  86.                 e.printStackTrace();
  87.             }
  88.         }
  89.  
  90.         latch.countDown();
  91.     }
  92.  
  93.     private void scan(File file) {
  94.         Scanner scanner = null;
  95.         int matches = 0;
  96.  
  97.         try {
  98.             scanner = new Scanner(file);
  99.         } catch (FileNotFoundException e) {
  100.             System.out.println("File Not Found.");
  101.             e.printStackTrace();
  102.         }
  103.  
  104.         while (scanner.hasNext())
  105.             if (scanner.next().equals(whatFind)) {
  106.                 matches++;
  107.             }
  108.  
  109.         if (matches > 0) {
  110.             String myStr = String.format(
  111.                     "File: %s - and the number of matches " + "is: %d",
  112.                     file.getAbsolutePath(), matches);
  113.             System.out.println(myStr);
  114.         }
  115.     }
  116.  
  117.     // ask user about input
  118.     public void askUserPathAndWord() {
  119.  
  120.         BufferedReader bufferedReader = new BufferedReader(
  121.                 new InputStreamReader(System.in));
  122.         String path;
  123.         String whatFind;
  124.         BlockingQueue<File> queue = new LinkedBlockingQueue<File>();
  125.  
  126.         try {
  127.             System.out.println("Please, enter a Path and Word"
  128.                     + "(which you want to find):");
  129.             System.out.println("Please enter a Path:");
  130.             path = bufferedReader.readLine();
  131.             System.out.println("Please enter a Word:");
  132.             whatFind = bufferedReader.readLine();
  133.  
  134.             if (path != null && whatFind != null) {
  135.  
  136.                 File endOfWorkFile = new File("GameOver.tmp");
  137.                 CountDownLatch latch = new CountDownLatch(2);
  138.  
  139.                 FolderScan folderScan = new FolderScan(path, queue, latch,
  140.                         endOfWorkFile);
  141.                 FileScan fileScan = new FileScan(whatFind, queue, latch,
  142.                         endOfWorkFile);
  143.  
  144.                 Executor executor = Executors.newCachedThreadPool();
  145.                 executor.execute(folderScan);
  146.                 executor.execute(fileScan);
  147.  
  148.                 latch.await();
  149.                 System.out.println("Thank you!");
  150.             } else {
  151.                 System.out.println("You did not enter anything");
  152.             }
  153.  
  154.         } catch (InterruptedException e) {
  155.             System.out.println("Interrupted.");
  156.             e.printStackTrace();
  157.         } catch (IOException | RuntimeException e) {
  158.             System.out.println("Wrong input!");
  159.             e.printStackTrace();
  160.         }
  161.     }
  162.  
  163.     /**
  164.      * @param args
  165.      */
  166.  
  167.     public static void main(String[] args) {
  168.         long startTime = System.currentTimeMillis();
  169.  
  170.         new FileScan().askUserPathAndWord();
  171.  
  172.         long stopTime = System.currentTimeMillis();
  173.         long elapsedTime = stopTime - startTime;
  174.         System.out.println("\nRuntime time " + elapsedTime + " milliseconds.");
  175.     }
  176. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement