Ficheiros




Programação em Java 2006-2007
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
//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
//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
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
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
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
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
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
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
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
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
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

Ficheiros texto

  • 1.
  • 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 Durantea 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 umprograma 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 doAlgoritmo 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 terrado 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 Paraalé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 importjava.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