Buffers para leitura de caracteres: BufferedReader

Suponha que ao invés de ler o arquivo de texto por caracteres fosse desejado ler uma linha do arquivo de cada vez. Para tanto, é necessário ler os caracteres um a um e agregá-los em um buffer até encontrar o caráter de fim de linha. Então esse conjunto de caracteres pode ser transformado em uma string e retornada como resultado desse método.

Esse tipo de funcionalidade adicional (ou decoração) já é suportado através de objetos da classe BufferedReader.

Um dos construtores para essa classe recebe como argumento um objeto Reader, ou seja, uma referência genérica para qualquer objeto derivado desta classe.

O método readLine implementa a funcionalidade para leituras de linhas da fonte, retornando um objeto String. Assim, caso se deseje ler linhas de texto de um arquivo, é necessário decorar um FileReader com a funcionalidade de um BufferedReader:

   String filename;
   // filename recebe o nome de algum arquivo texto...
   FileReader fr = new FileReader(filename);
   BufferedReader bfr = new BufferedReader(fr);

A partir desse ponto, pode-se ser linhas do arquivo especificado por filename através do método bfr.readLine().

A classe LineNumberReader, derivada de BufferedReader, mantém um registro interno relativo ao número de linhs lidas. Esse registro é manipulado através dos métodos int getLineNumber() e void setLineNumber(int).