8.9. Ficheiros de texto - leitura e escrita

Até agora, sempre que precisámos de obter alguma informação externa para o nosso programa, fizemo-lo através do System.in, que é um atributo static público da classe System , que é do tipo java.io.InputStream.

Um objeto do tipo InputStream fornece-nos um canal através do qual bytes de informação podem ser "lidos para dentro" do nosso programa.

Para podermos trabalhar estes bytes de informação de forma mais fácil, usamos um objeto do tipo Scanner, que converte sequências de bytes lidos do InputStream em valores de tipos vários (relembrar secção 8.5 neste livro).

 

8.9.1. Ler informação a partir de um ficheiro de texto qualquer

A classe Scanner fornece vários construtores, entre os quais:

Já vimos como usar o segundo.

Para criarmos um scanner que nos ajude a ler o conteúdo de um ficheiro de texto qualquer, podemos usar o primeiro construtor da lista acima:

Esta instrução cria um canal de leitura para o ficheiro myInput.txt. Depois é só usar os métodos da classe Scanner para ter acesso aos vários tokens nesse ficheiro.

Não é possível prever em tempo de compilação a existência de um ficheiro com o nome myInput.txt. Por essa razão, o método que contém aquela instrução pode lançar uma exceção em tempo de execução. Para já, não vamos ver como se trataria essa exceção (ver capítulo ??); vamos apenas avisar que tal exceção pode ocorrer, colocando na assinatura do método a expressão throws FileNotFoundException.

Se o conteúdo do ficheiro myInput.txt for:

então o output do main será:

 

8.9.2. Escrever informação num ficheiro de texto

Até agora, sempre que precisámos de fazer sair alguma informação para o exterior do nosso programa, de modo a que o utilizador a possa ver, fizemo-lo através do System.out, que é outro atributo static público da classe System , mas do tipo java.io.PrintStream.

Uma outra classe da biblioteca do Java, no pacote java.io, é a classe PrintStream que fornece métodos print e println para escrever valores dos vários tipos primitivos e do tipo String, e o método write para escrever uma String ou um único caráter, dado um inteiro representando o seu código.

O seguinte método lê o conteúdo de um ficheiro cujo nome é dado pelo parâmetro fileIn, linha a linha, e escreve as linhas invertidas num ficheiro cujo nome é dado pelo parâmetro fileOut.

Se o conteúdo do ficheiro myInput.txt for:

então a execução da seguinte instrução:

criará um ficheiro de nome myOutput.txt (se não existir ainda) e escreverá nesse ficheiro o seguinte conteúdo:

 

 


 

Anterior: 8.8. Garbagge collection

Seguinte: 8.10. Exceções