Ficheiros texto

13
Programação em Java 2006-2007 Ficheiros

Transcript of Ficheiros texto

Page 1: Ficheiros texto

Programação em Java 2006-2007

Ficheiros

Page 2: Ficheiros texto

2Programação em Java 2006-2007

Operações de entrada/saída

teclado monitor

entrada saída

ficheiro

ProgramProgramaa

ProgramProgramaa

leitura escrita

antes

agora

leitura escrita

ficheiro

Page 3: Ficheiros texto

3Programação em Java 2006-2007

Leitura

//imports aqui…public class LeituraFicheiro { public static void main(String [] args) throws throws IOExceptionIOException { //declarar e inicializar a variável nomeFicheiro String nomeFicheiro = “teste1.txt”; // abrir o ficheiro de texto BufferedReaderBufferedReader br = new BufferedReader(new FileReaderFileReader(nomeFicheiro)); String linha = br.readLine(); // ler a 1ª linha while(linha != null) { // o readLine devolve null no fim ficheiro System.out.println(linha); // mostrar linha no ecrã linha = br.readLine(); // ler a linha seguinte } // fechar o ficheiro br.close(); }}

Para ler um ficheiro de texto

utilizamos as classes

FileReader e BufferedReader

do pacote java.io

Antes de terminar devemos

fechar o ficheiro

Este ciclo permite ler um

ficheiro linha a linha

Page 4: Ficheiros texto

4Programação em Java 2006-2007

Escrita

//imports aqui …public class EscreverFicheiro { static void main(String [] args) throws IOExceptionthrows IOException { String nomeFicheiro= "novo.txt"; // abrir o ficheiro de texto BufferedWriter bw = new BufferedWriter(new FileWriter(nomeFx)); String linha = readLine(); // ler uma linha do teclado while(s.length() > 0) { // termina quando digitar <enter> bw.write(s); // escrever a linha no ficheiro bw.newLine(); // inserir mudança linha no ficheiro linha = readLine(); // ler outra linha do teclado } // fechar o ficheiro bw.close(); System.out.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 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

Page 5: Ficheiros texto

5

Tratando os erros

Durante a Leitura de um ficheiro, vários erros podem ocorrer,

O Ficheiro a ser lido pode não existir O Ficheiro pode estar corrompido etc.Qualquer um dos pontos acima pode causar um erro de entrada e saída (IOException)

Programação em Java 2006-2007

Page 6: Ficheiros texto

6

Tratando os erros (try – catch)

Para tratar estes erros temos que usar o bloco try e

catch, onde:try > Tentar executar um trecho de códigocatch > Pegar os erros que forem ocorrer

durante a execução do bloco try

Programação em Java 2006-2007

Sintaxe

try{ //bloco de código a executar

} catch(<Nome da Excepcao> <variavel>){

//tratamento do erro}

Page 7: Ficheiros texto

7

Tratando os erros (exemplo)

Programação em Java 2006-2007

try{ // abrir o ficheiro de texto BufferedWriter bw = new BufferedWriter(new FileWriter(nomeFx)); String linha = readLine(); // ler uma linha do teclado while(s.length() > 0) { // termina quando digitar <enter> bw.write(s); // escrever a linha no ficheiro bw.newLine(); // inserir mudança linha no ficheiro linha = readLine(); // ler outra linha do teclado } // fechar o ficheiro bw.close(); System.out.println("O conteúdo foi armazenado no ficheiro “ + nomeFx); }catch (IOException e){

Sysstem.out.println(“Ocorreram problemas na leitura do ficheiro ” + e.getMessage());}

}

Page 8: Ficheiros texto

8Programação em Java 2006-2007

Problema 1Criar um programa que leia um ficheiro com a listagem dos alunos deuma 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ída2. 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, separando com um espaço

a9845 João Silva Martinsa10200 Ana Maria Almeidaa15800 José Pedro Alves…

Ficheiro de entradaa9845 João Silva Martins 16a10200 Ana Maria Almeida 14a15800 José Pedro Alves 17

...

Ficheiro de saída

Page 9: Ficheiros texto

9Programação em Java 2006-2007

Problema 1. Esquema do Algoritmo

Declaração de variáveis: String nomeFx1nomeFx1, nomeFx2nomeFx2, ss; int notanota; BufferedReader f1f1 = nul; //descritor do ficheiro de entrada BufferedWriter f2 f2 = null; //descritor dos ficheiro de saídaAlgoritmo: 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

Page 10: Ficheiros texto

10Programação em Java 2006-2007

Problema 2Na 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’sPor 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 entradaua doce ua

Ficheiro de saída

Page 11: Ficheiros texto

11Programação em Java 2006-2007

A Classe ScannerPara além do BufferedReader podemos usar a classe Scanner (do

java 5) para o ler de ficheiros e do teclado, com excepção que ela só tratar dados primitivos e do tipo String

//Leitura do tecladoimport java.util.Scanner; public class LeDoTeclandoUsanoScanner{

public static void main(String[] args){

Scanner scanner = new Scanner(System.in); 

System.out.print("Introudzua um valor inteiro: ");int value = scanner.nextInt();

 System.out.println("O valor lido foi: " + value);

}}

Page 12: Ficheiros texto

12Programação em Java 2006-2007

A Classe Scanner

import java.io.File;import java.util.Scanner; public class LeDoFicheiroUsandoClasseScanner{ 

public static void main1(String[] args) throws FileNotFoundException{

Scanner s = new Scanner(new File("arquivo.txt"));while (s.hasNextLine()){

System.out.println(s.nextLine());}

}

}

Page 13: Ficheiros texto

13Programação em Java 2006-2007

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/0http://java.sun.com/docs/books/tutorial/essential/io/index.html