View difference between Paste ID: swsBbLm7 and aaS2Uczu
SHOW: | | - or go back to the newest paste.
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-
					if (currentFile.getName().toLowerCase().endsWith((".txt"))) {
41+
42-
						queue.put(currentFile);
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
}