No artigo Criando e Gravando dados em Txt com Java foi apresentado como realizar a criação e a gravação de dados em um arquivo texto usando as classes FileWriter e PrintWriter. Neste segundo artigo que aborda este tema será demonstrado como recuperar os dados de arquivos que utilizam o formato txt.

Programas Java implementam o processamento de arquivos utilizando as classes do pacote java.io. A hierarquia de classes oferecida por este pacote, apresentada de forma parcial na Figura 1, é relativamente grande e complexa, oferecendo mais de 50 classes distintas para o processamento de entrada e saída em arquivos baseados em bytes e caracteres e arquivos de acesso aleatório. Os arquivos são abertos criando-se objetos através de uma das classes de fluxo, citando:

  • FileInputStream: para entrada baseada em bytes de um arquivo.
  • FileOutputStream: para saída baseada em bytes para um arquivo.
  • RandomAccessFile: para entrada e saída baseada em bytes de e para um arquivo.
  • FileReader: para entrada baseada em caracteres de um arquivo.
  • FileWriter: para saída baseada em caracteres para um arquivo.
Lendo dados de Txt com Java
Figura 1. Hierarquia parcial de classes do pacote java.io

Para demonstrar a utilização da classe FileReader para entrada baseada em caracteres de arquivos texto será desenvolvida uma aplicação Java para efetuar a leitura, da primeira até a última linha, de arquivos criados neste formato.

Desenvolvendo a Aplicação Java

Nos arquivos de texto os dados são organizados como uma sequência de caracteres dividida em linhas terminadas por um caractere de fim de linha (\n). A interação de um programa com um dispositivo através de arquivos passa por três etapas: abertura do arquivo, leitura dos dados e fechamento do arquivo.

A Listagem 1 apresenta como utilizar as classes FileReader e BufferedReader na abertura e leitura de dados baseada em caracteres de um arquivo de texto. O método read() é empregado na leitura de um caractere enquanto que o método readLine() deverá ser aplicado na leitura de uma linha do arquivo texto.


import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;

public class Exemplo {

  public static void main(String[] args) {
    Scanner ler = new Scanner(System.in);

    System.out.printf("Informe o nome de arquivo texto:\n");
    String nome = ler.nextLine();

    System.out.printf("\nConteúdo do arquivo texto:\n");
    try {
      FileReader arq = new FileReader(nome);
      BufferedReader lerArq = new BufferedReader(arq);

      String linha = lerArq.readLine(); // lê a primeira linha
// a variável "linha" recebe o valor "null" quando o processo
// de repetição atingir o final do arquivo texto
      while (linha != null) {
        System.out.printf("%s\n", linha);

        linha = lerArq.readLine(); // lê da segunda até a última linha
      }

      arq.close();
    } catch (IOException e) {
        System.err.printf("Erro na abertura do arquivo: %s.\n",
          e.getMessage());
    }

    System.out.println();
  }
}
Listagem 1. Lendo dados de um arquivo texto

Entendendo o código fonte da Listagem 1:

  1. O usuário final informa o nome do arquivo que será aberto para operações de entrada através do objeto arq, instanciado e criado a partir da classe FileReader;
  2. Objeto de leitura lerArq é associado a um fluxo de entrada de dados baseado em caracteres através da classe BufferedReader;
  3. Definido o arquivo de texto externo, foi implementado um processo de repetição (while) para ler todas as linhas do arquivo para exibi-las no fluxo padrão de saída System.out;
  4. O tratamento de exceções foi implementado usando um bloco try catch com a classe IOException, responsável pelas exceções em operações de entrada e saída. Outras importantes classes de exceções derivadas da classe IOException são: FileNotFoundException, que ocorre se o arquivo não for localizado ou um novo arquivo não puder ser criado; e EOFException, que acontece se houver uma tentativa de ler depois do final do arquivo.

Executando a aplicação deve-se informar o nome do arquivo texto e o conteúdo do arquivo lido será exibido como pode ser observado nas duas figuras a seguir:

A Figura 2 mostra o resultado da leitura do arquivo, "tabuada.txt" localizado na unidade "d", criado como exemplo no artigo Criando e Gravando dados em Txt com Java.

A Figura 3 mostra o resultado da leitura do arquivo, "AloMundo.java" localizado na unidade "d", que representa um código fonte escrito em Linguagem Java.

Lendo o arquivo
Figura 2. Lendo o arquivo "tabuada.txt"
Lendo dados de Txt com Java
Figura 3. Lendo o arquivo "AloMundo.java"

Confira também