Agora que já escrevemos dados em um arquivo, vamos aprender como ler dados de um arquivo existente em disco.
Receber dados é 'input', então podemos fazer usando a Scanner. A diferença é que, em vez de receber a entrada pelo teclado, vamos receber os dados de um arquivo.
Assim como na Class Formatter, coloquei algumas exceções para o programa ficar mais robusto, estável e para que você tenha o conhecimento de alguns dos métodos de tratamento de erros. As explicações estão nas strings do código-fonte.
Crie um arquivo chamado "teste.txt" e escreva algo nele, de preferência algo com espaços em branco, tabs e quebras de linhas para você ver o que acontece.
Eu coloquei:
linha 1
linha 2
linha 3
Vamo aos códigos fonte:
Lendo.java
public class Lendo
{
public static void main(String[] args)
{
LendoMetodos teste = new LendoMetodos();
teste.abrir();
teste.ler();
teste.fechar();
}
}
LendoMetodos.java
import java.io.File;
import java.util.Scanner;
import java.lang.IllegalStateException;
import java.util.NoSuchElementException;
import java.io.FileNotFoundException;
public class LendoMetodos
{
private Scanner entrada;
public void abrir()
{
try
{
entrada = new Scanner( new File("teste.txt") );
}
catch(FileNotFoundException arquivoNaoEncontrado)
{
System.err.println("Nao foi possível abrir o arquivo! Não encontrado!");
System.exit(1); //saída de erro
}
}
public void ler()
{
try
{
while( entrada.hasNext() )
System.out.printf("%s - %d\n",entrada.next(), entrada.nextInt());
}
catch(NoSuchElementException entradaDiferente)
{
System.err.println("Entrada diferente da esperada");
entrada.close();
System.exit(1);
}
catch(IllegalStateException erroLeitura)
{
System.err.println("Erro de leitura. Scanner foi fechada antes da input");
System.exit(1);
}
}
public void fechar()
{
entrada.close();
}
}
O looping: while( entrada.hasNext() )
mostra linha por linha do arquivo, até o final. Assim, o processamento e formatação é feito tendo em mente esse raciocínio, por linha.
A formatação é você quem escolhe, usando entrada.next(), entrada.nextInt(), entrada.nextDouble() etc.
Mais uma vez, ao término do uso do arquivo, fechá-lo: entrada.close()
Nenhum comentário:
Postar um comentário