использование java.util.Scanner для чтения файла побайтно
Я пытаюсь прочитать символ одной строки символом с помощью java.util.Scanner. Однако я получаю это исключение «:
Exception in thread "main" java.util.InputMismatchException: For input string: "contents of my file" at java.util.Scanner.nextByte(Scanner.java:1861) at java.util.Scanner.nextByte(Scanner.java:1814) at p008.main(p008.java:18)
public static void main(String[] args) throws FileNotFoundException < File source = new File("file.txt"); Scanner scanner = new Scanner(source); while(scanner.hasNext()) < System.out.println((char)scanner.nextByte()); >scanner.close() >
Есть ли у кого-нибудь идеи относительно того, что я могу делать неправильно? Изменить: я понял, что написал hasNext() вместо hasNextByte(). Однако, если я это сделаю, он ничего не распечатает.
4 ответа
Почему вы хотите использовать сканер для чтения байта файла байтом? Это похоже на использование тачки для переноса кармана. (Если вам действительно нужна тачка для замены кармана, сообщите мне, чтобы я стал вашим другом).
Но серьезно: Class InputStream читает байты из файла, просто и надежно, и ничего не делает.
Класс scanner был недавно введен в API Java, поэтому примеры учебников могли вытащить данные из файла с меньшей болью, чем обычно с использованием каскада new BufferedReader(new InputStream) . Его специальность вводит числа и строки из входных файлов свободной формы. Метод nextByte() фактически считывает одну или несколько десятичных цифр из входного потока (если они есть) и преобразует число, сканируемое таким образом, в однобайтовое значение.
И если вы читаете байты, зачем вы их выводите как char s? Байты не являются символами, и взаимное преобразование грубой силы не удастся в некоторых местах. Если вы хотите увидеть значения этих байтов, распечатайте их так, как они есть, и вы увидите маленькие целые числа от 0 до 255.
Если вы хотите прочитать char из файла, FileReader - это класс для вас.
У меня есть текстовый файл, начинающийся со слова «Аннотация» (что удивительно ..). В любом случае, когда я пытаюсь читать с помощью: Сканер сканер = новый сканер (файл); byte b = scanner.nextByte (); Я получаю исключение java.util.InputMismatchException. Почему я не вижу значений от 0 до 255, не могли бы вы помочь? Файл UTF-8.
Мой ответ объяснил это, но, возможно, не очень хорошо. Сканер читает и интерпретирует ввод текстовой формы, а не низкоуровневые байты! Попробуйте создать файл, первая строка которого читается как 1 10 100 1000 hello и прочитайте его с помощью Scanner.nextByte() . Вы успешно прочитаете и вернете в виде байтов числа 1, 10 и 100, но на 1000 произойдет исключение и (если вы прочитали после этого) на «привет», потому что это не те значения, которые могут быть представлены в байте.
Сканер предназначен для синтаксического анализа текстовых данных - его метод nextByte() предполагает, что ввод состоит из цифр (возможно, предшествует знак).
Возможно, вы захотите использовать FileReader , если вы действительно читаете текстовые данные, или FileInputStream , если это двоичные данные. Или FileInputStream , завернутый в InputStreamReader , если вы читаете текст с определенной кодировкой символов (к сожалению, FileReader не разрешить вам указывать кодировку, но неявно использует кодировку по умолчанию платформы, что часто не очень хорошо).
Как происходит считывание побайтово (InputStream) для символов >255 бит.
Возможно глупый вопрос, но хочется разобраться в некоторых фундоментальных вещах. Допустим имеем код:
public class MyTEST public static void main(String[] args) Scanner scanner = new Scanner(System.in); try FileInputStream fileInputStream = new FileInputStream(scanner.nextLine()); while (fileInputStream.available()>0) int data = fileInputStream.read(); System.out.print(data+" "); System.out.println((char)data); > fileInputStream.close(); scanner.close(); > catch (Exception e) e.printStackTrace(); > > >
Считываем побайтово файл и выводим на консоль в виде 10-чного представления байта и соответствующего ему символьного. Просьба знающих пояснить. Допустим в файле имеется английская "A" и все. Получим в консоле
что логично. Откроем например https://unicode-table.com/ru/#0410 найдем английскую A и видим, что в десятичном представлении её значение равно 65. Поменяем в исходном файле английскую A на русскую A и результат будет следующий:
Значение буквы А русского алфавита - 1040 в десятичном формате. Понятно в представление байта это не влезет. И я понимаю, что внутри идет разбивка на несколько байтов, но хотелось бы узнать подробнее. Может кто подскажет или поделиться нужной ссылкой?
Побитовое чтение файла
inputStream.read(bytes); Когда вызывается этот метод, он читает единственный байт из файла и возвращает его как целое число.
если в файле всего один символ. Например "ф". То чему будет равено bytes[0] ?
Как определяется какая используется кодировка? какой символ не может быть записан в элемент массива?
Побитовое чтение массива
Есть массив byte. Необходимо считать данные побитово. То есть начало определенного фрагмента может.
Побитовое чтение файла
1.Взять файл C:\1.jpg(например) 2.Побитно записать его в C:\2.jpg(например) Я уже пару дней видел.
Побитовое чтение файла
приветствую всех! Возник вопрос. Необходимо открыть файл(любого формата) побитово, как это лучше.
Побитовое чтение текстового файла
Здравствуйте, перейдем сразу к делу: Нужно побитово считать текстовый файл и далее к каждому биту.
Сообщение от werrt
Сообщение от werrt
Сообщение от werrt
Привет, рекомендую почитать:
Java 2 Том I. Основы библиотеки профессионала Хорстман, Корнел
Глава 12. Потоки и файлы с 729 ст.
спасибо, попробую почитать
Добавлено через 11 часов 2 минуты
не нашел ответа в книге
Открытие и побитовое чтение jpeg-файла
Здравствуйте уважаемые участники форума. Прошу подсказать, как лучше справиться с задачей.
Как выполнить побитовое чтение файла mp3?
Здравствуйте! Подскажите, пожалуйста, как выполнить побайтовое чтение файла mp3?
какая функция осуществляет побитовое чтение файла
какая функция осуществляет побитовое чтение файла подскажите кто знает .
Побитовое чтение
Есть файл видео и мне известна его структура. Например структура следующая: 8 бит 1 бит 1 бит.
Побитовое чтение из поля SqLite
Пробовал так вот const string databaseName = @"C:\MyProj\base.db"; SQLiteConnection connection.
Побитовое чтение/запись в файл
Добрый день. Мне нужно реализовать класс, который дает возможность побитовой записи/четения в/из.