2. Operações de entrada/saída
entrada saída
a teclado monitor
n leitura escrita
t Programa
e
s
ficheiro ficheiro
a
g leitura escrita
o Programa
r
a
Programação em Java 2006-2007 2
3. //imports aqui…
public class LeituraFicheiro {
public static void main(String [] args) throws
Leitura IOException {
//declarar e inicializar a variável nomeFicheiro
String nomeFicheiro = “teste1.txt”;
// abrir o ficheiro de texto
Para ler um ficheiro de texto
BufferedReader br = new BufferedReader(new
utilizamos as classes
FileReader(nomeFicheiro));
FileReader
FileReader e BufferedReader
do pacote java.io String linha = br.readLine(); // ler a 1ª linha
while(linha != null) { // o readLine devolve null no fim
Este ciclo permite ler um ficheiro
ficheiro linha a linha System.out.println(linha); // mostrar linha no ecrã
linha = br.readLine(); // ler a linha seguinte
}
Antes de terminar devemos
// fechar o ficheiro
fechar o ficheiro
br.close();
}
}
Programação em Java 2006-2007 3
4. //imports aqui …
public class EscreverFicheiro {
Escrita static void main(String [] args) throws IOException {
String nomeFicheiro= "novo.txt";
// abrir o ficheiro de texto
Para escrever num ficheiro de BufferedWriter bw = new BufferedWriter(new
texto utilizamos as classes FileWriter(nomeFx));
FileWriter e BufferedWriter do
pacote java.io 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
Este ciclo permite ler uma linha do ficheiro
teclado e escreve-la no ficheiro até linha = readLine(); // ler outra linha do teclado
que o utilizador introduzir <enter> }
// fechar o ficheiro
bw.close();
Antes de terminar devemos System.out.println("O conteúdo foi armazenado no ficheiro “
fechar o ficheiro + nomeFx);
}
}
Programação em Java 2006-2007 4
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 5
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ódigo
catch > Pegar os erros que forem ocorrer durante a
execução do bloco try
Sintaxe
try{
//bloco de código a executar
}
catch(<Nome da Excepcao> <variavel>){
//tratamento do erro
}
Programação em Java 2006-2007 6
7. Tratando os erros (exemplo)
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());
}
}
Programação em Java 2006-2007 7
8. 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, separando com um
espaço
Ficheiro de entrada Ficheiro de saída
a9845 João Silva Martins a9845 João Silva Martins 16
a10200 Ana Maria Almeida a10200 Ana Maria Almeida 14
a15800 José Pedro Alves a15800 José Pedro Alves 17
… ...
Programação em Java 2006-2007 8
9. Problema 1.
Esquema do Algoritmo
Declaração de variáveis:
String nomeFx1, nomeFx2, s ;
nomeFx1 nomeFx2
int nota;
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 9
10. 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 Ficheiro de saída
lar doce lar ua doce ua
Programação em Java 2006-2007 10
11. A Classe Scanner
Para 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 teclado
import 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);
}
}
Programação em Java 2006-2007 11
12. 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());
}
}
}
Programação em Java 2006-2007 12
13. 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 13