Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.javarush.test.level18.lesson10.home08;
- import java.io.*;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.Map;
- /* Нити и байты
- Читайте с консоли имена файлов, пока не будет введено слово "exit"
- Передайте имя файла в нить ReadThread
- Нить ReadThread должна найти байт, который встречается в файле максимальное число раз,
- и добавить его в словарь resultMap,
- где параметр String - это имя файла, параметр Integer - это искомый байт.
- Закрыть потоки. Не использовать try-with-resources
- */
- /*
- 1. В main, пока не ввели слово exit считываются имена файлов
- 2. Имя файла передается в нить ReadThread (как???)
- 3. Нить читает и считает файл и файл и байт в словарь.
- Проблема:
- 1. Конструктор ReadThread
- */
- /*
- *Пока не ввели exit создаем (через конструктор) новую нить ReadThread
- Передаем туда имя файла с консоли, она читает файл, считает и добавляет в словарь.
- *
- * ATTENTION
- 1. Если файл не найден, искать новый - читать новый файл
- 2. Если два байта с одинаковым количеством "попаданий". Кидать оба.
- * */
- public class Solution {
- public static 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 consoleInput = "";
- while (true) {
- consoleInput=reader.readLine();
- if (consoleInput.equals("exit")) {
- break;
- }
- else {
- new ReadThread(consoleInput).start();//it would be different threads
- }
- }
- reader.close();
- /*---------------------------------------------*/
- /* for (Map.Entry<String, Integer> entry : resultMap.entrySet()) {
- String key = entry.getKey().toString();;
- Integer value = entry.getValue();
- System.out.println("key, " + key + " value " + value );
- }*/
- /*---------------------------------------------*/
- }
- public static class ReadThread extends Thread {
- public ReadThread(String fileName) {
- //implement constructor body
- super(fileName);
- }
- // implement file reading here - реализуйте чтение из файла тут
- public void run() {
- try {
- String fileName = this.getName();
- byte[]bytes = fileToArray(this.getName());//тут выдает ошибку
- HashSet<Byte>setBytes = countBytes(bytes);
- resultMap.put(fileName,returnByte(bytes, setBytes));
- }
- catch (Exception e) {
- }
- }
- }
- /*
- /*-------------------------------------------------------*/
- public static byte[] fileToArray (String fileName) throws IOException
- {
- File file = new File(fileName);
- byte[] bFile = new byte[(int) file.length()];
- FileInputStream fileInputStream = new FileInputStream(file);
- fileInputStream.read(bFile);
- fileInputStream.close();
- return bFile;
- }
- public static HashSet<Byte>countBytes (byte[]bytesArray) {
- HashSet<Byte> allBytes = new HashSet<Byte>();
- for (int i = 0; i < bytesArray.length;i++) {
- allBytes.add(bytesArray[i]);
- }
- return allBytes;
- }
- public static int countSpecByte (byte myByte, byte[]someArray)/*Не нужно тут выкидывать исключения*/
- {
- int counter = 0;
- for (byte b : someArray) {
- if (myByte == b) {
- counter++;
- }
- }
- return counter;
- }
- public static int returnByte (byte[]someBytes, HashSet<Byte>someUniqeBytes) {
- HashMap<Byte, Integer> bytesAndCounts = new HashMap<Byte, Integer>();
- for (byte specByte : someUniqeBytes) {
- bytesAndCounts.put(specByte, countSpecByte(specByte,someBytes));
- }
- Map.Entry<Byte, Integer> maxEntry = null;
- for (Map.Entry<Byte, Integer> entry : bytesAndCounts.entrySet())
- {
- if (maxEntry == null || entry.getValue().compareTo(maxEntry.getValue()) > 0)//может тут и два одинаковых влепить
- {
- maxEntry = entry;
- }
- }
- return maxEntry.getKey();
- }
- /*---------------------------------------------------------------------------*/
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement