La classe LineNumberReader rappresenta un buffer di caratteri con la peculiarità di tenere traccia del numero di riga. Una riga viene considerata terminata se viene incontrato un line feed (‘\n’), un carriage return (‘\r’) o un carriage return seguito immediatamente da un line feed.

Scriviamo dunque un programma che legge il sorgente del programma stesso per mostralo in output sulla console. Faremo iniziare ogni riga con il rispettivo numero di riga:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.LineNumberReader;

public class LineNumberSource {
  public static void main(String[] args) throws Throwable {
    File thisSrc = new File("./src/LineNumberSource.java");
    LineNumberReader reader = new LineNumberReader(
        new BufferedReader(new FileReader(thisSrc)));
    String buff = null;
    while((buff = reader.readLine()) != null) {
      System.out.println(reader.getLineNumber() +". "+buff);
    }
    reader.close();
  }
}

Prestando attenzione al path del sorgente (che nel mio caso è “./src/LineNumberSource.java”), il risultato è:

1. import java.io.BufferedReader;
2. import java.io.File;
3. import java.io.FileReader;
4. import java.io.LineNumberReader;
5.
6. public class LineNumberSource {
7.   public static void main(String[] args) throws Throwable {
8.     File thisSrc = new File("./src/LineNumberSource.java");
9.     LineNumberReader reader = new LineNumberReader(
10.         new BufferedReader(new FileReader(thisSrc)));
11.     String buff = null;
12.     while((buff = reader.readLine()) != null) {
13.       System.out.println(reader.getLineNumber() +". "+buff);
14.     }
15.     reader.close();
16.   }
17. }