package com.javarush.test.level18.lesson10.home08;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.*;
/* Нити и байты
Читайте с консоли имена файлов, пока не будет введено слово "exit"
Передайте имя файла в нить ReadThread
Нить ReadThread должна найти байт, который встречается в файле максимальное число раз, и добавить его в словарь resultMap,
где параметр String - это имя файла, параметр Integer - это искомый байт.
Закрыть потоки. Не использовать try-with-resources
*/
public class Solution {
public static Map<String, Integer> resultMap = new HashMap<String, Integer>();
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(true) {
String s = scanner.nextLine();
if (s.equals("exit")) break;
new ReadThread(s).start();
}
scanner.close();
}
public static class ReadThread extends Thread {
private String fileName;
public ReadThread(String fileName) {
//implement constructor body
this.fileName = fileName;
}
// implement file reading here - реализуйте чтение из файла тут
public void run() {
try {
FileInputStream inputStream = new FileInputStream(fileName);
ArrayList<Integer> bytes = new ArrayList<>();
while (inputStream.available() > 0) {
int x = inputStream.read();
bytes.add(x);
}
int x = 0; //максимальное количество повторений до следующего цикла
int max;
if (bytes.size() > 0) {
max = bytes.get(0); //значение байта, повторяющегося максимальное количество раз
for (int i = 0; i < bytes.size(); i++) {
int count = 0;
for (Integer aByte : bytes) {
if (Objects.equals(bytes.get(i), aByte)) count++;
}
if (count > x) {
x = count;
max = bytes.get(i);
}
}
} else max = 0;
resultMap.put(fileName, max);
inputStream.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
}
Leave A Comment