Post on 15-Jun-2015
Programação em Java 2006-2007
Ficheiros
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
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
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
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
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}
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());}
}
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
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
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
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);
}}
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());}
}
}
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