Мог бы кто объяснить почему не проходит данный код? Старался делать всё по условию, в выводе получается имя файла + максимальный байт из этого файла.
package com.javarush.task.task18.task1823;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
/*
Нити и байты
Читайте с консоли имена файлов, пока не будет введено слово "exit".
Передайте имя файла в нить ReadThread.
Нить ReadThread должна найти байт, который встречается в файле максимальное число раз, и добавить его в словарь resultMap,
где параметр String - это имя файла, параметр Integer - это искомый байт.
Закрыть потоки.
Требования:
1. Программа должна считывать имена файлов с консоли, пока не будет введено слово "exit".
2. Для каждого файла создай нить ReadThread и запусти ее.
3. После запуска каждая нить ReadThread должна создать свой поток для чтения из файла.
4. Затем нити должны найти максимально встречающийся байт в своем файле и добавить его в словарь resultMap.
5. Поток для чтения из файла в каждой нити должен быть закрыт.
*/
public class Solution {
public static Map<String, Integer> resultMap = new HashMap<String, Integer>();
public static ArrayList<String> pathsNames = new ArrayList<>();
public static void main(String[] args) {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String exit = "exit";
String filePath;
try {
while (true) {
filePath = bufferedReader.readLine();
if (filePath.equals(exit)) break;
pathsNames.add(filePath);
Thread fileReader = new ReadThread(filePath);
fileReader.start();
}
} catch (IOException e) {
e.getStackTrace();
}
for (Map.Entry<String, Integer> entry : resultMap.entrySet()) {
System.out.println(entry.getKey() + " - " + entry.getValue());
}
}
public static class ReadThread extends Thread {
FileInputStream fileInputStream;
Map<Integer, Integer> temporaryMap = new HashMap<>();
String fileName;
public ReadThread(String fileName) throws IOException{
this.fileInputStream = new FileInputStream(fileName);
}
@Override
public void run(){
try {
while (fileInputStream.available() > 0) {
temporaryMap.merge(fileInputStream.read(), 1, Integer::sum);
}
for (int i = 0; i < pathsNames.size(); i++) {
fileName = pathsNames.get(i);
}
Integer maxFrequency = 0;
Integer key;
for (Map.Entry<Integer, Integer> currentFrequency : temporaryMap.entrySet()) {
if (maxFrequency <= currentFrequency.getValue()) {
maxFrequency = currentFrequency.getValue();
key = currentFrequency.getKey();
resultMap.put(fileName, key);
}
}
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}