Чтение следующей строки InputStream Java

У меня есть InputStream, который будет читать из текстового файла. Я заметил, что входной поток не читается с пустой следующей строки.

Пример текстового файла:

[This is

A test file

Here.]

Код:

while ((str = br.readLine())!= null) {
    System.out.println(str);
}

Между некоторыми текстовыми файлами может быть несколько строк разрыва. Как заставить входной поток принимать строки разрыва?

Как видно из примера текстового файла, после «[This is» следует пустая строка, а затем следует «Test file». Как прочитать пустую строку между двумя наборами строк? (Это мое определение разрыва строки/разрыва строки)


person thotheolh    schedule 26.04.2011    source источник
comment
Что вы имеете в виду под линией разрыва? Вы имеете в виду строку, содержащую только \r\n или \n (в зависимости от ОС)?   -  person alpian    schedule 26.04.2011
comment
BufferedReader не пропускает пустые строки — интересно, может ли то, что вы видите как две пустые строки, действительно быть CR LF?   -  person Michael Brewer-Davis    schedule 26.04.2011
comment
Да, я также предлагаю использовать BufferedReader, у меня никогда не было проблем с пропуском пустых строк.   -  person keepitreall89    schedule 26.04.2011
comment
InputStream не имеет readLine() метод. Не могли бы вы опубликовать весь свой код? Что вы ожидаете прочитать на пустой строке?   -  person Ishtar    schedule 26.04.2011
comment
Согласен с @Ishtar: InputStream работает с байтами, а не с символами - как такового понятия строк нет, так как нет понятия символов и, как такового, нет понятия '\ r'   -  person Liv    schedule 26.04.2011


Ответы (3)


Ты имеешь ввиду?

while ((str = br.readLine())!= null && str.trim().length()>0) {
    System.out.println(str);
}

Это дает вам все непустые строки.

person Peter Lawrey    schedule 26.04.2011
comment
Не очень уверен здесь, но я думаю, что это дает только первые строки, пока не будет прочитана пустая строка. Кроме того, это должно быть !str.trim().isEmpty(). - person xmjx; 13.02.2012
comment
isEmpty() подходит, если у вас Java 6+. - person Peter Lawrey; 13.02.2012

BufferedReader прочитает все строки в файле независимо от того, пусты они или нет. Он будет искать разрывы строк: LF+CR в Windows и LF в GNU/Linux. Согласно документации BufferedReader:

Строка считается завершенной переводом строки ('\n'), возвратом каретки ('\r') или возвратом каретки, за которым сразу следует перевод строки.

Итак, это зависит от того, как на самом деле выглядит ваш текстовый файл. Действительно ли у него есть возврат каретки и перевод строки между строками или это просто так отображается? Это можно узнать, посмотрев файл в шестнадцатеричном редакторе (LF — 0x0A, CR — 0x0D). Если это так, то BufferedReader должен выдать вам эти пустые строки.

person alpian    schedule 26.04.2011

Извините за ошибку, это BufferedReader, принимающий InputStream. BufferedReader читал каждую строку, включая следующую строку/строку разрыва/разрыв строки. Проблема заключалась в том, что мой алгоритм, который я написал, просто пропустил следующую строку/разрыв строки/разрыв строки. Извините за беспокойство и беспокойство.

Спасибо за ответы на все вопросы.

person thotheolh    schedule 27.04.2011