Для поиска максимально встречающегося байта использовала уже обкатанный алгоритм. Но ошибка именно в этом пункте. Правда, в этот раз компилятор добавил очень много try catch - не знаю, читаем ли такой код со стороны.
package com.javarush.task.task18.task1823;
import java.io.*;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/*
Нити и байты
*/
public class Solution {
public static Map<String, Integer> resultMap = new HashMap<String, Integer>();
public static void main(String[] args) throws IOException, InterruptedException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String name=null;
while (true) {
name=reader.readLine();
if (name.equals("exit")) break;
ReadThread readThread = new ReadThread(name);
}
}
public static class ReadThread extends Thread {
FileInputStream fileInputStream;
String fileName;
public ReadThread(String fileName) throws FileNotFoundException, InterruptedException {
//implement constructor body
super(fileName);
this.fileName = fileName;
}
@Override
public void run() {
HashMap<String, Integer> resultMap = new HashMap<>();
FileInputStream fileReader = null;
try {
fileReader = new FileInputStream(fileName);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
HashMap<Integer, Integer> bytesOften = new HashMap<>();
while (true) {
try {
if (!(fileReader.available()>0)) break;
} catch (IOException e) {
e.printStackTrace();
}
int data = 0;
try {
data = fileReader.read();
} catch (IOException e) {
e.printStackTrace();
}
if (bytesOften.containsKey(data)) {
bytesOften.put(data, bytesOften.get(data)+1);
}
else bytesOften.put(data, 1);
}
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
int max = Collections.max(bytesOften.values());
synchronized(Solution.class) {
for (HashMap.Entry<Integer, Integer> pair : bytesOften.entrySet())
if (pair.getValue().equals(max))
resultMap.put(fileName, pair.getKey());
}
}
// implement file reading here - реализуйте чтение из файла тут
}
}