Programação em Java 2006-2007
Aula 12
Ficheiros
Programação em Java 2006-2007 2
Operações de entrada/saída
teclado monitor
entrada saída
ficheiro
Programa Programa Programa Programa
leitura escrita
a n t e s
a g o r a
leitura escrita
ficheiro
Programação em Java 2006-2007 3
Leitura
import java.io.*;
class Ex_12_1_lerFicheiro extends P1App {
static void main(String [] args) throws IOException throws IOException {
String s, nomeFx;
// atribuir a nomeFx o nome do ficheiro nomeFx = “teste1.txt”;
// declarar um descriptor para leitura de um ficheiro de texto
BufferedReaderBufferedReader f = null;
try {try
// abrir o ficheiro de texto f = new BufferedReader(new FileReader
FileReader(nomeFx));
} catch(Exception e)catch(Exception e) {
// ocorreu um erro na abertura do ficheiro, logo:
println("Impossível abrir o ficheiro " + nomeFx);
println("fim do programa...");
return;
}
s = f.readLine(); // ler a 1ª linha
while(s != null) { // o readLine devolve null no fim ficheiro
println(s); // mostrar linha no ecrã s = f.readLine(); // ler a linha seguinte }
// fechar o ficheiro f.close();
} }
Para ler um ficheiro de texto utilizamos as classes FileReader e BufferedReader
do pacote java.io
Este bloco implementa o tratamento de erros usando
excepções. Desta forma, se ocorrer um erro na abertura do ficheiro, o programa pode detecta-
lo, visualizar uma mensagem e terminar. Para isto é preciso
adicionar as palavras chaves throws IOException à declaração
do procedimento main
Este ciclo permite ler um ficheiro linha a linha
Antes de terminar devemos fechar o ficheiro
Programação em Java 2006-2007 4
Escrita
import java.io.*;
class Ex_12_2_escreverFicheiro extends P1App {
static void main(String [] args) throws IOException throws IOException {
String s, nomeFx= "novo.txt";
// declarar descritor para acesso ao ficheiro em modo escrita
BufferedWriter f = null;
try {
// abrir o ficheiro de texto f = new BufferedWriter(new FileWriter(nomeFx));
} catch(Exception e) {
// ocorreu um erro na abertura do ficheiro, logo:
println("Impossível criar o ficheiro " + nomeFx);
println("fim do programa...");
return;
}
s = readLine(); // ler uma linha do teclado while(s.length() > 0) { // termina quando digitar
<enter>
f.write(s); // escrever a linha no ficheiro f.newLine(); // inserir mudança linha no ficheiro
s = readLine(); // ler outra linha do teclado }
// fechar o ficheiro f.close();
println("O conteúdo foi armazenado no ficheiro " + nomeFx);
} }
Para escrever num ficheiro de texto utilizamos as classes FileWriter e BufferedWriter
do pacote java.io
Este bloco implementa o tratamento de erros usando
excepções.
Este ciclo permite ler uma linha do teclado e escreve-la no ficheiro até
que o utilizador introduzir <enter>
Antes de terminar devemos fechar o ficheiro
Programação em Java 2006-2007 5
Problema 1
Criar um programa que leia um ficheiro com a listagem dos alunos de uma turma e cria um ficheiro novo com as notas que obtiveram em
Programação em Java. O programa deverá funcionar da seguinte forma:
1. Pedir ao utilizador para introduzir via teclado os nomes do ficheiro de entrada e do ficheiro de saída
2. Mostrar o conteúdo do ficheiro de entrada (linha a linha), pedindo a cada passo a nota da disciplina de Programação em Java obtida pelo aluno listado
3. Adicionar a nova informação no ficheiro final.
a9845 João Silva Martins a10200 Ana Maria Almeida a15800 José Pedro Alves
…
Ficheiro de entrada
a9845 João Silva Martins 16 a10200 Ana Maria Almeida 14 a15800 José Pedro Alves 17
...
Ficheiro de saída
Programação em Java 2006-2007 6
Problema 1.
Esquema do Algoritmo
Declaração de variáveis:
String nomeFx1nomeFx1, nomeFx2nomeFx2, ss;
int notanota;
BufferedReader f1 = nul; //descritor do ficheiro de entradaf1 BufferedWriter f2 f2 = null; //descritor dos ficheiro de saída Algoritmo:
Leitura do nome do ficheiro de entrada para nomeFx1nomeFx1
Leitura do nome do ficheiro de saída para nomeFx2nomeFx2 Abrir ficheiro de entrada com nome em nomeFx1nomeFx1 Abrir ficheiro de saída com nome em nomeFx2nomeFx2 Ler primeira linha do ficheiro de entrada para ss
Enquanto houver linhas no ficheiro de entrada
1º. Mostrar no ecrã a linha de texto armazenada em ss 2º. Ler a nota da disciplina de Java para a variável notanota
3º. Escrever o conteúdo de s mais a nota de nota no ficheiro de saída 4º. Ler linha seguinte do ficheiro de entrada para ss
Fechar ficheiro de entrada f1f1 Fechar ficheiro de saída f2f2
Programação em Java 2006-2007 7
Problema 2
Na terra do Alberto Alexandre (localmente conhecido por Auexande Aubeto), o dialecto local é semelhante ao português com duas excepções:
1.
Não dizem os R’s
2.
Trocam os L’s por U’s
Por exemplo, “ lar doce lar ” deve ser traduzido para “ ua doce ua ”.
Implementar um tradutor de ficheiros de texto em português para o dialecto do Alberto. O tradutor deve pedir ao utilizador o nome do ficheiro a traduzir e apresentar a tradução no ecrã.
lar doce lar
Ficheiro de entrada
ua doce ua
Ficheiro de saída
Programação em Java 2006-2007 8
Bibliografia
António José Mendes, Maria José Marcelino. Fundamentos de programação em JAVA 2.FCA – Editora de informática, 2003.