Aula 12 Ficheiros Programação em Java 2006-2007 Operações de entrada/saída a n t e s entrada saída teclado monitor leitura Programa escrita ficheiro a g o r a ficheiro leitura Programa Programação em Java 2006-2007 escrita 2 Leitura 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 detectalo, visualizar uma mensagem e terminar. Para isto é preciso adicionar as palavras chaves throws IOException à declaração do procedimento main Antes de terminar devemos fechar o ficheiro import java.io.*; class Ex_12_1_lerFicheiro extends P1App { static void main(String [] args) 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 BufferedReader f = null; try { // abrir o ficheiro de texto f = new BufferedReader(new FileReader(nomeFx)); } 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 Este ciclo permite ler um ficheiro f.close(); linha a linha } } Programação em Java 2006-2007 3 Escrita 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 import java.io.*; class Ex_12_2_escreverFicheiro extends P1App { static void main(String [] args) 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); } } Programação em Java 2006-2007 4 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. Ficheiro de entrada Ficheiro de saída a9845 João Silva Martins a10200 Ana Maria Almeida a15800 José Pedro Alves … a9845 João Silva Martins 16 a10200 Ana Maria Almeida 14 a15800 José Pedro Alves 17 ... Programação em Java 2006-2007 5 Problema 1. Esquema do Algoritmo Declaração de variáveis: String nomeFx1, nomeFx2, s; int nota; BufferedReader f1 = nul; //descritor do ficheiro de entrada BufferedWriter f2 = null; //descritor dos ficheiro de saída Algoritmo: Leitura do nome do ficheiro de entrada para nomeFx1 Leitura do nome do ficheiro de saída para nomeFx2 Abrir ficheiro de entrada com nome em nomeFx1 Abrir ficheiro de saída com nome em nomeFx2 Ler primeira linha do ficheiro de entrada para s Enquanto houver linhas no ficheiro de entrada 1º. Mostrar no ecrã a linha de texto armazenada em s 2º. Ler a nota da disciplina de Java para a variável nota 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 s Fechar ficheiro de entrada f1 Fechar ficheiro de saída f2 Programação em Java 2006-2007 6 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ã. Ficheiro de entrada lar doce lar Ficheiro de saída ua doce ua Programação em Java 2006-2007 7 Bibliografia António José Mendes, Maria José Marcelino. Fundamentos de programação em JAVA 2.FCA – Editora de informática, 2003. Sun’s Tutorial: Basic I/0 http://java.sun.com/docs/books/tutorial/essential/io/index.html Programação em Java 2006-2007 8