View difference between Paste ID: aaS2Uczu and YtnAEYHJ
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() {  }
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
				if (currentFile.isDirectory()) {
39
					findFiles(currentFile.getAbsolutePath());
40
				} else {
41-
							queue.put(currentFile);
41+
42
						queue.put(currentFile);
43
					}
44
				}
45
			}
46
		} catch (InterruptedException e) {
47
			e.printStackTrace();
48
		}
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-
	public FileScan() { 	}
68+
69
	public FileScan() {
70-
	Set<String> words = new HashSet<String>();
70+
71-
	int matches = 0;
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-
			System.out.println("FileNotFoundException.");
99+
100
			System.out.println("File Not Found.");
101
			e.printStackTrace();
102-
		while (scanner.hasNext()) {
102+
103-
			String word = scanner.next();
103+
104-
			words.add(word);
104+
		while (scanner.hasNext())
105
			if (scanner.next().equals(whatFind)) {
106
				matches++;
107-
		if (words.contains(this.whatFind)) {
107+
108-
			matches++;
108+
109
		if (matches > 0) {
110-
		
110+
			String myStr = String.format(
111-
		String myStr = String.format("File: %s and the number of matches "
111+
					"File: %s - and the number of matches " + "is: %d",
112-
				+ "is = %d", file.getAbsolutePath(), matches);
112+
					file.getAbsolutePath(), matches);
113-
		System.out.println(myStr);
113+
			System.out.println(myStr);
114
		}
115-
		matches = 0;
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 (IOException | RuntimeException e) {
155
			System.out.println("Wrong input!");
156
			e.printStackTrace();
157
		} catch (InterruptedException e) {
158
			System.out.println("Interrupted.");
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
}