Руководство по Java LineNumberReader

Для чтения файла построчно класс LineNumberReader может быть идеальным выбором. Это буферизованный поток ввода символов, который отслеживает номера строк.

По умолчанию нумерация строк начинается с 0. Строка считается завершенной любым из следующих символов: перевод строки('\n'), возврат каретки('\r'), их комбинацией('\r\n') или любым из предыдущих символов завершения, за которым следует конец потока, или конец потока, которому не предшествует другой символ завершения.

1. Как работает LineNumberReader?

LineNumberReader является подклассом класса BufferedReader и позволяет нам отслеживать, какую строку мы обрабатываем в данный момент.

Нумерация строк начинается с 0(аналогично индексам массива). Всякий раз, когда LineNumberReader встречает терминатор строки обернутым Reader, номер строки увеличивается. В конце потока номер строки увеличивается в последний раз.

LineNumberReader предоставляет следующие важные методы:

  • getLineNumber() : получает текущий номер строки, которую читает читатель.
  • setLineNumber(int lineNumber) : устанавливает номер текущей строки. Обратите внимание, что этот метод не изменяет текущую позицию читателя в потоке; он только изменяет значение, которое будет возвращено getLineNumber().
  • readLine() : считывает текущую строку, не включая символы завершения строки, или null, если достигнут конец потока.
  • reset() : сбрасывает поток до последней отметки, созданной методом mark().
  • mark(n) : отмечает текущую позицию в потоке. Вызов reset() попытается переместить поток в эту точку, а также соответствующим образом сбросит номер строки.

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

2. Использование LineNumberReader

Давайте создадим быстрый пример, чтобы показать возможности LineNumberReader. Это содержимое файла, которое я буду использовать для чтения с помощью LineNumberReader в примере ниже.

 firstName=Локешфамилия=Гуптаблог=howtodoinjavaтехнология=java

В данном примере мы перебираем строки с помощью метода lineNumberReader.readLine(), пока он не вернет null. Значение null означает, что все строки в файле были прочитаны.

final String fileName = "app.properties";try(LineNumberReader lineNumberReader= new LineNumberReader(new FileReader(filename))) {//Print initial line numberSystem.out.println("Line " + lineNumberReader.getLineNumber());//Setting initial line numberlineNumberReader.setLineNumber(5);//Get current line numberSystem.out.println("Line " + lineNumberReader.getLineNumber());//Read all lines now; Every read increase the line number by 1String line = null;while((line = lineNumberReader.readLine()) != null){System.out.println("Line " + lineNumberReader.getLineNumber() + ": " + line);}}catch(Exception ex){ex.printStackTrace();} 

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

 Линия 0Строка 5Строка 6: firstName=ЛокешСтрока 7: фамилия=ГуптаСтрока 8: blog=howtodoinjavaСтрока 9: технология=java 

Исходный код на Github

Прокрутить вверх