Como ler caracteres de um arquivo em Java

Em algum momento você vai precisar ler um arquivo .txt e como fazer isso?


Inicialmente, crie um arquivo chamado "file.txt", e o bote dentro do projeto de Java, junto das pastas src e bin. Escreve apenas a letra 'a' nesse arquivo.

Para abrir este arquivo, iremos usar a classe FileInputStream que irá receber uma string que representa o local onde está armazenado o arquivo em seu computador.

Como ele está na pasta do próprio projeto, apenas colocamos o nome do arquivo: file.txt
Mas você pode colocar o endereço completo: /usr/Java/Arquivos/file.txt
Vamos chamar de "entrada" o objeto responsável pela abertura do arquivo.

Como queremos trabalhar com caracteres, a maneira que este objeto vai ler o arquivo é uma maneira especial, pois deve ler bytes que representem caracteres.
Vamos usar a classe InputStreamReader para 'tratar' esse objeto que abriu o arquivo, essa classe vai fazer com que a leitura do arquivo seja uma leitura específica, uma leitura de caracteres.
Vamos chamar esse objeto de 'entradaFormatada'.

E, finalmente, para ler o primeiro caractere do arquivo (não importa quantos bytes tenham sido lidos, pois aInputStreamReader já tratou de ler e formatar essa entrada para caractere) iremos usar o método read(), que retorna um inteiro que representa o caractere.

Assim, nosso código que lê esse primeiro caractere fica:

import java.io.*;

public class Arquivos {

    public static void main(String[] args) throws IOException{
        FileInputStream entrada = new FileInputStream("file.txt");
        InputStreamReader entradaFormatada = new InputStreamReader(entrada);
        int c = entradaFormatada.read();
        
        System.out.println(c);
    }

}

O resultado deve ser 97, que é a representação de 'a'. Para podermos exibir na tela o caractere 'a', basta fazermos o cast para char:

System.out.print( (char) c);

Lendo mais de um caractere - Fim de arquivo

Ok, aprendemos a ler um caractere de um arquivo.
Mas, e para ler outro? Usar o método de novo? Sim, funciona.
E se seu arquivo for um texto enorme, de milhares de caracteres, usar milhares de vezes o read() ?

Óbvio que não. Podemos usar um looping, como através do laço while, que deve ler todos os caracteres e só parar quando terminar o arquivo.

E como que vamos saber quando termina o arquivo? Fácil: o maravilhoso método read() retorna o valor -1 quando isso ocorre. E ele faz outra coisa interessante: após ele ler um caractere, ele imediatamente aponta para o próximo.

Assim, escreva em seu arquivo 'file.txt' o seguinte texto (ou qualquer outro): Apostila Java Progressivo
Para exibir todo o conteúdo de texto de um arquivo, usaremos o seguinte código:

import java.io.*;

public class Arquivos {

    public static void main(String[] args) throws IOException{
        FileInputStream entrada = new FileInputStream("file.txt");
        InputStreamReader entradaFormatada = new InputStreamReader(entrada);
        int c = entradaFormatada.read();
        
        while( c!=-1){
            System.out.print( (char) c);
            c = entradaFormatada.read();
        }
    }

}

PS: Quando você cria o código de leitura de arquivos, automaticamente a IDE insere o 'throws IOException', para tratar eventuais erros e exceções.

Tags: arquivo, tutorial, JAVA

Total de comentários: 0
avatar