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.
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();
}
}
Saiba mais: Usando a Classe Scanner no Java
Entendendo o código fonte da Listagem 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;
- Objeto de leitura lerArq é associado a um fluxo de entrada de dados baseado em caracteres através da classe BufferedReader;
- 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;
- 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.