Как найти максимальный байт в файле

Максимальный байт
Ввести с консоли имя файла
Найти максимальный байт в файле, вывести его на экран.
Закрыть поток ввода-вывода


This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters

Show hidden characters

package com.javarush.test.level18.lesson03.task01;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
/* Максимальный байт
Ввести с консоли имя файла
Найти максимальный байт в файле, вывести его на экран.
Закрыть поток ввода-вывода
*/
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
FileInputStream file = new FileInputStream(reader.readLine());
int max = file.read();
while (file.available()>0)
{
int data = file.read();
if (data>max)
{
max = data;
}
}
file.close();
System.out.println(max);
}
}

so basicaly i have file C:/test.txt, and output which i get(55) isnt correct, i want to find maximum byte in that file, can someone please help me to understand what do i do wrong, or is there mistake in my code?

public static void main(String[] args) throws Exception
            {
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
              String filName = bufferedReader.readLine();
                int max;
                FileInputStream fileReader = new FileInputStream(filName);

                max = fileReader.read();
                while (fileReader.available() > 0)
                {
                    if (max < fileReader.read())
                    {
                        max = fileReader.read();
                    }
                }
                fileReader.close();
                System.out.println(max);

            }
        }

asked Apr 11, 2014 at 22:31

Predict_it's user avatar

Predict_itPredict_it

2472 gold badges4 silver badges12 bronze badges

3

Here you read the byte at position N, and if it’s greater than your current max, you replace max with the byte at position N + 1:

if (max < fileReader.read())
{
     max = fileReader.read();
}

Can you see how this won’t work? You need to save the result of fileReader.read() so you can compare it then use it:

int current = fileReader.read();
if (current > max)
{
    max = current;
}

Also, according to this comment:

data is 1 2 3 4 5

You’re expecting to read integers from the file, when in fact you’re reading raw byte/character values. If the file is binary, you’ll need to read in integer sized chunks. If the file is text, you’ll need to parse integers out of it.

answered Apr 11, 2014 at 22:42

Mud's user avatar

MudMud

27.7k11 gold badges59 silver badges90 bronze badges

0

Не понимаю.

Потоки чтения закрываю ( и консоль и файл ).
outside byte читать как last byte ( мой печальный английский ))

package com.javarush.task.task18.task1801;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.Arrays;

/*
Максимальный байт
*/

public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

FileInputStream inputStream = new FileInputStream(reader.readLine());
//read bytes
int[] allByte = new int[inputStream.available()];

for (int i = 0; i < inputStream.available(); i++) {
allByte[i] = inputStream.read();
}
// sort
Arrays.sort(allByte);
// out outside byte ( max )
System.out.println(allByte[allByte.length – 1]);

inputStream.close();
reader.close();
}
}

Этот веб-сайт использует данные cookie, чтобы настроить персонально под вас работу сервиса. Используя веб-сайт, вы даете согласие на применение данных cookie. Больше подробностей — в нашем Пользовательском соглашении.

Здравствуйте,натолкните на верную мысль пожалуйста, никак не могу решить задачу.

    public static void main(String[] args) throws Exception {
        List<Integer>bytes=new LinkedList<>();
        List<Integer>max_bytes=new LinkedList<>();
        String fileName = "e:/f.txt";
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        FileInputStream is = new FileInputStream(fileName);
        while (is.available() > 0) {
            bytes.add(is.read());
        }
        for (int i = 0; i < bytes.size(); i++) {
            for (int j = i+1; j < bytes.size(); j++)
                if (bytes.get(i)==bytes.get(j)) {
                    max_bytes.add(bytes.get(i));
                    break;
                }

        }
        System.out.println(bytes);//Первый массив
        System.out.println(max_bytes);//Массив с повторяющимся байтами.
    }

Вывод программы:

[53, 13, 10, 56, 13, 10, 49, 49, 13, 10, 51, 13, 10, 50, 13, 10, 49, 48]

[13, 10, 13, 10, 49, 49, 13, 10, 13, 10]

Тоесть куда-то теряется по одному числу из повторяющихся.

Вывод тестовый просто чтоб убедиться что он добавляет только повторющиеся.
Мне нужно вывести найболее частые повторы: 13 10 49.

package com.javarush.test.level18.lesson03.task01;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

/* Максимальный байт
Ввести с консоли имя файла
Найти максимальный байт в файле, вывести его на экран.
Закрыть поток ввода-вывода
*/

public class Solution
{
    public static void main(String[] args) throws Exception
    {
        ArrayList<Integer> array = new ArrayList<>();
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        FileInputStream iStream = new FileInputStream(reader.readLine());
        while (iStream.available() > 0)
        {
            array.add(iStream.read());
        }
        int max = 0;
        for (Integer aByte : array)
        {
            if (aByte > max) max = aByte;
        }
        System.out.println(max);
        iStream.close();
    }
}

Добавить комментарий