Класс Java.io.LineNumberReader в Java

Опубликовано: 15 Февраля, 2022

Буферизованный поток ввода символов, отслеживающий номера строк. Этот класс определяет методы setLineNumber (int) и getLineNumber () для установки и получения текущего номера строки соответственно.

  • По умолчанию нумерация строк начинается с 0. Это число увеличивается с каждым указателем конца строки по мере чтения данных и может быть изменено с помощью вызова setLineNumber (int).
  • Однако обратите внимание, что setLineNumber (int) фактически не изменяет текущую позицию в потоке; он изменяет только значение, которое будет возвращено getLineNumber ().
  • Строка считается завершенной любым из следующих символов: перевод строки (' n'), возврат каретки (' r') или возврат каретки, за которым сразу следует перевод строки.

Конструкторы:

  • LineNumberReader (Reader in): создайте новое средство чтения нумерации строк, используя размер буфера ввода по умолчанию.
  • LineNumberReader (Reader in, int sz): создать новое средство чтения нумерации строк, считывающее символы в буфер заданного размера.

Методы:

  • int getLineNumber (): получить текущий номер строки.
     Синтаксис: public int getLineNumber ()
    Возврат:
    Текущий номер строки
  • void mark (int readAheadLimit): Отметьте текущую позицию в потоке. Последующие вызовы reset () будут пытаться переместить поток в эту точку, а также соответствующим образом сбросят номер строки.
     Синтаксис: общедоступная метка недействительности (int readAheadLimit)
              выбрасывает IOException
    Параметры:
    readAheadLimit - ограничение на количество символов, которые могут быть прочитаны 
    при этом все еще сохраняя отметку. Прочитав столько символов, 
    попытка сбросить поток может потерпеть неудачу.
    Броски:
    IOException
  • int read (): чтение одного символа. Знаки конца строки сжимаются в отдельные символы новой строки (' n'). Каждый раз, когда считывается терминатор строки, текущий номер строки увеличивается.
     Синтаксис: public int read ()
             выбрасывает IOException
    Возврат:
    Прочитанный символ или -1, если достигнут конец потока
    Броски:
    IOException
  • int read (char [] cbuf, int off, int len): считывает символы в часть массива. Каждый раз, когда считывается признак конца строки, текущий номер строки увеличивается.
     Синтаксис: public int read (char [] cbuf,
           int off,
           int len)
             выбрасывает IOException
    Параметры:
    cbuf - Целевой буфер
    off - смещение, с которого начинается сохранение символов
    len - Максимальное количество символов для чтения
    Возврат:
    Количество прочитанных байтов или -1, если конец потока уже достигнут
    Броски:
    IOException
  • String readLine (): чтение строки текста. Каждый раз, когда считывается терминатор строки, номер текущей строки увеличивается.
     Синтаксис: public String readLine ()
                    выбрасывает IOException
    Возврат:
    Строка, содержащая содержимое строки, не включая строку 
    символы завершения или ноль, если был достигнут конец потока
    Броски:
    IOException
  • void reset (): сбросить поток до самой последней отметки.
     Синтаксис: public void reset ()
               выбрасывает IOException
    Броски:
    IOException
  • void setLineNumber (int lineNumber): установить текущий номер строки.
     Синтаксис: public void setLineNumber (int lineNumber)
    Параметры:
    lineNumber - int, определяющий номер строки
  • long skip (long n): пропускать символы.
     Синтаксис: public long skip (long n)
              выбрасывает IOException
    Параметры:
    n - количество символов, которые нужно пропустить
    Возврат:
    Количество фактически пропущенных символов
    Броски:
    IOException
    IllegalArgumentException

Program :

//Java program demonstrating LineNumberReader methods
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
class LineNumberReaderDemo
{
    public static void main(String[] args) throws IOException 
    {
        FileReader fr = new FileReader("file.txt");
        LineNumberReader lnr = new LineNumberReader(fr);
        char c[] = new char[20];
  
        //illustrating setLineNumber()
        lnr.setLineNumber(0);
          
        //illustrating set
        System.out.println(lnr.getLineNumber());
          
        //illustrating markSupported() method
        if(lnr.markSupported())
        {
            System.out.println("mark() method is supported");
            //illustrating mark method
            lnr.mark(100);
        }
          
        /*File Contents
        * This is first line
        this is second line
        This is third line
        */
          
        //skipping 19 characters
        lnr.skip(19);
  
        //illustrating ready() method
        if(lnr.ready())
        {
            //illustrating readLine() method
            System.out.println(lnr.readLine());
  
            //illustrating read(char c[],int off,int len)
            lnr.read(c);
            for (int i = 0; i <20 ; i++)
            {
                System.out.print(c[i]);
            }
              
            //illustrating reset() method
            lnr.reset();
              
            for (int i = 0; i <18 ; i++)
            {
                //illustrating read() method
                System.out.print((char)lnr.read());
            }
            int ch;
              
            //illustrating read() method
            System.out.println(lnr.readLine());
            while((ch = lnr.read())==1)
                System.out.print((char)ch);
        }
          
        //close the stream
        lnr.close();
    }
}

Выход :

0
mark() method is supported
this is second line
This is third line
This is first line

Автор статьи - Нишант Шарма . Если вам нравится GeeksforGeeks, и вы хотели бы внести свой вклад, вы также можете написать статью с помощью provide.geeksforgeeks.org или отправить ее по электронной почте на deposit@geeksforgeeks.org. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.

Вниманию читателя! Не переставай учиться сейчас. Ознакомьтесь со всеми важными концепциями Java Foundation и коллекций с помощью курса "Основы Java и Java Collections" по доступной для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .