Нити и байты
Читайте с консоли имена файлов, пока не будет введено слово «exit«.
Передайте имя файла в нить ReadThread.
Нить ReadThread должна найти байт, который встречается в файле максимальное число раз, и добавить его в словарь resultMap,
где параметр String — это имя файла, параметр Integer — это искомый байт.
Закрыть потоки.
Требования:
1. Программа должна считывать имена файлов с консоли, пока не будет введено слово "exit".
2. Для каждого файла создай нить ReadThread и запусти ее.
3. После запуска каждая нить ReadThread должна создать свой поток для чтения из файла.
4. Затем, нити должны найти максимально встречающийся байт в своем файле и добавить его в словарь resultMap.
5. Поток для чтения из файла в каждой нити должен быть закрыт.
public static volatile Map<String, Integer> resultMap = new HashMap<String, Integer>();
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String nameFile = reader.readLine();
while (!("exit".equals(nameFile))){
ReadThread rd = new ReadThread(nameFile);
rd.start();
}
}
public static class ReadThread extends Thread {
String name;
FileInputStream file;
public ReadThread(String fileName) throws FileNotFoundException {
file = new FileInputStream(fileName);
this.name = fileName;
}
public void run() {
ArrayList<Integer> list = new ArrayList<>();
HashMap<Integer, Integer> map = new HashMap<>();
try {
while (file.available()>0){
list.add(file.read());
}
file.close();
int count= 0;
for (int ch : list) {
if (map.containsKey(ch)) {
map.put(ch, map.get(ch) + 1);
} else {
map.put(ch, 1);
}
}
int max = 0;
int bytes = 0;
for(Map.Entry<Integer, Integer> paitr: map.entrySet() ){
if (paitr.getValue()>max){
max =paitr.getValue();
bytes = paitr.getKey();
}
}
resultMap.put(name,bytes);
} catch (IOException e) {
e.printStackTrace();
}
}
}