SlideShare ist ein Scribd-Unternehmen logo
1 von 13
Downloaden Sie, um offline zu lesen
Curso Superior de Tecnologia em Telemática
         Programação Orientada a Objetos

       Streams em Java
                            Copyright©2010
                            Prof. César Rocha
                                                1
Objetivos

§ Explorar os conceitos fundamentais acerca do uso de
  streams de arquivos em Java
   § Principais classes, abrindo conexões de streams, leitura e
     gravação de objetos com streams, serialização e boas
     práticas de programação.
§ Como trocar dados com outros programas não-Java
   § Leitura e gravação de texto e caracteres com streams
§ Exercícios e vários exemplos de códigos que você deve
  testar visando solidificar seus conhecimentos
   § A diversidade de novas classes neste módulo é grande!
                                                                  2
Motivação

§ Vimos que uma aplicação Java possui diversos objetos
  cooperantes com estado e comportamento
   § Cada objeto é único e possui seus próprios dados
§ O quê fazer quando precisamos salvar todo o estado de
  um (ou mais) objeto(s) no disco?
   § Aplicação bancária, onde todos os objetos Transação
     devem ser gravados em um arquivo de lote diário
   § Um Jogo de computador, onde o estado atual de um
     Personagem deve ser gravado para uma sessão futura
§ E quando a aplicação deve trocar informações com
  outros sistemas (muitas vezes não-OO)?                      3
Alternativas

§ Em Java, basicamente, há dois formatos possíveis para
  gravar dados em arquivos, conforme a seguir:
   Œ Serialização: um arquivo irá guardar uma fila de objetos
    serializados. O conteúdo deste arquivo é quase ilegível, mas
    natural à JVM. Quando há necessidade de recuperar o
    objeto a partir do arquivo, ele é “inflado” e enviado para a
    memória, automaticamente
   • Texto/Caracteres: um arquivo irá guardar uma cadeia
    de caracteres. Neste processo, o programador cria seu
    formato pessoal de armazenamento e pode compreendê-lo.
    Usa-se, geralmente, algum delimitador para materializar
    este formato
                                                               4
Passos para gravar objetos

§ Seguem os passos básicos necessários para escrever
  (enviar) um objeto para um arquivo no disco:
   ΠCriar um FileOutputStream:
     FileOutputStream fos = new
                    FileOutputStream(“arquivo.ser”);
   • Criar um ObjectOutputStream:
     ObjectOutputStream oos = new          Note a concatenação.
                    ObjectOutputStream(fos);
   Ž Gravar o objeto:
     Cliente c1 = new Cliente();
     oos.writeObject(c1);
   • Fechar a conexão:                 Dica: se arquivo.ser não existir
                                           no disco, ele será criado.
     oos.close();
                                                                          5
Interface Serializable

§ Se sua classe precisa ser serializada, implemente a
  interface Serializable (marker interface)
public class Cliente implements Serializable {
public class Cliente implements Serializable {
 private String nome;
 private String nome;                                     Dica: estes valores serão salvos
 private double salario;
 private double salario;                                         em arquivo.ser
 public Cliente(){...}
 public Cliente(){...}
 public    import java.io.FileOutputStream;
            import java.io.FileOutputStream;
          String getNome(){…}
 public   String getNome(){…}
           import java.io.IOException;
            import java.io.IOException;
 public
 public   void setNome(String n){…}
          void setNome(String n){…}
           import java.io.ObjectOutputStream;
            import java.io.ObjectOutputStream;
 public
 public   double getSalario(){…}
          double getSalario(){…}
 public
 public    public class GravaCliente {
          void setSalario(double s){…}
            public class GravaCliente {
          void setSalario(double s){…}
 public
 public   String toString(){…}main( String[] args ) {
              public static void
          String toString(){…}main( String[] args ) {
              public static void
                 Cliente c = new Cliente();
                   Cliente c = new Cliente();
                   try {
                   try {
                     FileOutputStream fos = new FileOutputStream("arquivo.ser");
                     FileOutputStream fos = new FileOutputStream("arquivo.ser");
                     ObjectOutputStream oos = new ObjectOutputStream(fos);
                     ObjectOutputStream oos = new ObjectOutputStream(fos);
                     oos.writeObject(c);
                     oos.writeObject(c);
                     oos.close();
                     oos.close();
                   } catch ( IOException e ) { e.printStackTrace(); }
                   } catch ( IOException e ) { e.printStackTrace(); }
               }
               }
           }
           }                                                                           6
Importante

§ E o que acontece quando o objeto possui variáveis
  membros do tipo referência (outros objetos)?
   § Quando um objeto é serializado, toda a árvore (hierarquia)
     que forma o objeto principal é serializada
     automaticamente
   § Porém, os objetos membros também devem ser
     serializáveis, caso contrário uma exceção do tipo
     NotSerializableException será gerada.
§ E o que acontece quando não temos acesso a classe
  membro para corrigir (alterar o código)?
   § Podemos usar a herança de implementação (extends)
                                                                  7
Passos para restaurar/ler objetos

§ Seguem os passos básicos necessários para ler
  (restaurar) um objeto a partir de um arquivo:
   ΠCriar um FileInputStream:
     FileInputStream fis = new
                    FileInputStream(“arquivo.ser”);

   • Criar um ObjectInputStream:               Note a concatenação.
     ObjectInputStream ois = new
                    ObjectInputStream(fis);

   Ž Ler o objeto:
     Cliente novo = (Cliente) ois.readObject();
                                    Dica: os objetos devem ser lidos
   • Fechar a conexão:              na mesma ordem em que foram
     ois.close();                    gravados anteriormente (fila). 8
Passos para gravar caracteres

§ Seguem os passos básicos necessários para escrever
  (enviar) um texto para um arquivo no disco:
   ΠCriar um FileWriter
     FileWriter fw = new
                    FileWriter(“arquivo.txt”);
   • Concatená-lo com um BufferedWriter:
     BufferedWriter bw = new
                    BufferedWriter(fw);
   Ž Gravar o texto:
     bw.write(“Um texto”);           Dica: O controle (separadores)
                                     deve ser feito pelo programador
   • Fechar a conexão:
     bw.close();
                                                                       9
Exemplo

§ Lembre-se: o controle sobre toda a formatação do
  arquivo (separadores, quebras de linha, etc) é tarefa do
  programador do sistema
    import
    import   java.io.BufferedWriter;
             java.io.BufferedWriter;
    import
    import   java.io.FileWriter;
             java.io.FileWriter;
    import
    import   java.io.IOException;
             java.io.IOException;

    public class GravaTexto {
    public class GravaTexto {
      public static void main( String[] args ) {
      public static void main( String[] args ) {
         try {
         try {
           FileWriter fw = new FileWriter("compras.txt");
           FileWriter fw = new FileWriter("compras.txt");
           BufferedWriter bw = new BufferedWriter(fw);
           BufferedWriter bw = new BufferedWriter(fw);
           bw.write("100"); bw.write(“#"); bw.write("Feijão"); bw.write("n");
           bw.write("100"); bw.write(“#"); bw.write("Feijão"); bw.write("n");
           bw.write("200"); bw.write(“#"); bw.write("Arroz"); bw.write("n");
           bw.write("200"); bw.write(“#"); bw.write("Arroz"); bw.write("n");
           bw.close();
           bw.close();
         } catch ( IOException e ) { e.printStackTrace(); }
         } catch ( IOException e ) { e.printStackTrace(); }
      }
      }
    }
    }


                                                                            10
Passos para ler caracteres

§ Seguem os passos básicos necessários para ler
  (restaurar) um texto a partir de um arquivo:
   ΠCriar um FileReader
     FileReader fr = new
                    FileReader(“arquivo.txt”);
   • Concatená-lo com um BufferedReader:
     BufferedReader br = new
                    BufferedReader(fr);
   Ž Lê o texto:
     String s = br.readLine();       Dica: quando não houver mais
                                   linhas, readLine() retornará null
   • Fechar a conexão:
     br.close();
                                                                       11
Exemplo

§ O quê fazer para extrair os dados em cima de cada uma
  das linhas presentes no arquivo?
  § Use o método split() ou a classe StringTokenizer
     import java.io.BufferedReader;
     import java.io.BufferedReader;
     import java.io.FileReader;
     import java.io.FileReader;
     import java.io.IOException;
     import java.io.IOException;
     public class LeTexto {
     public class LeTexto {
       public static void main( String[] args ) {
       public static void main( String[] args ) {
          try {
          try {
                 FileReader fr = new FileReader("compras.txt");
                 FileReader fr = new FileReader("compras.txt");
                 BufferedReader br = new BufferedReader(fr);
                 BufferedReader br = new BufferedReader(fr);
                 String linha = null;
                 String linha = null;
                 while ( (linha = br.readLine()) != null ) {
                 while ( (linha = br.readLine()) != null ) {
                          String[] v = linha.split("#");
                          String[] v = linha.split("#");
                          for ( String dado : v ) System.out.println(dado);
                          for ( String dado : v ) System.out.println(dado);
                 }
                 }
                 br.close();
                 br.close();
             } catch ( IOException e ) { e.printStackTrace(); }
             } catch ( IOException e ) { e.printStackTrace(); }
         }
         }
     }
     }                                                                        12
Para um bom aproveitamento:

§ Codifique os exemplos mostrados nestes slides e
  verifique pontos de dúvidas
§ Resolva todas as questões da lista de streams
§ Procure o professor ou monitor da disciplina e questione
  conceitos, listas, etc.
§ Não deixe para codificar tudo e acumular assunto para
  a avaliação.
   § Este é apenas um dos assuntos abordados na prova!



                                                         13

Weitere ähnliche Inhalte

Was ist angesagt?

Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
Maurício Linhares
 
Curso java 06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismoCurso java   06 - mais construtores, interfaces e polimorfismo
Curso java 06 - mais construtores, interfaces e polimorfismo
Maurício Linhares
 

Was ist angesagt? (20)

Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDB
 
Mongo + php
Mongo + phpMongo + php
Mongo + php
 
Threads 05: Travas de Exclusão Mútua
Threads 05: Travas de Exclusão MútuaThreads 05: Travas de Exclusão Mútua
Threads 05: Travas de Exclusão Mútua
 
Palestra2009
Palestra2009Palestra2009
Palestra2009
 
MongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberMongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saber
 
Abstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineAbstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP Doctrine
 
Threads 08: Executores e Futures
Threads 08: Executores e FuturesThreads 08: Executores e Futures
Threads 08: Executores e Futures
 
Apostila de ext js com php e postgresql v1.2
Apostila de ext js com php e postgresql v1.2Apostila de ext js com php e postgresql v1.2
Apostila de ext js com php e postgresql v1.2
 
Apostila de ext js com php e postgresql v1.3
Apostila de ext js com php e postgresql v1.3Apostila de ext js com php e postgresql v1.3
Apostila de ext js com php e postgresql v1.3
 
Apostila de ext js com php e postgresql v1.1
Apostila de ext js com php e postgresql v1.1Apostila de ext js com php e postgresql v1.1
Apostila de ext js com php e postgresql v1.1
 
Javascript avançado
Javascript avançadoJavascript avançado
Javascript avançado
 
Threads 03: Ciclo de vida, aplicações e boas práticas
Threads 03: Ciclo de vida, aplicações e boas práticasThreads 03: Ciclo de vida, aplicações e boas práticas
Threads 03: Ciclo de vida, aplicações e boas práticas
 
Apostila de ext js com php e postgresql v1.0
Apostila de ext js com php e postgresql v1.0Apostila de ext js com php e postgresql v1.0
Apostila de ext js com php e postgresql v1.0
 
Threads 07: Sincronizadores
Threads 07: SincronizadoresThreads 07: Sincronizadores
Threads 07: Sincronizadores
 
Java 16
Java 16Java 16
Java 16
 
Apostila de ext js com php e postgresql v0.5
Apostila de ext js com php e postgresql v0.5Apostila de ext js com php e postgresql v0.5
Apostila de ext js com php e postgresql v0.5
 
Apache Ant
Apache AntApache Ant
Apache Ant
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
 
Desfrutando os Componentes do Zend Framework
Desfrutando os Componentes do Zend FrameworkDesfrutando os Componentes do Zend Framework
Desfrutando os Componentes do Zend Framework
 
Curso java 06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismoCurso java   06 - mais construtores, interfaces e polimorfismo
Curso java 06 - mais construtores, interfaces e polimorfismo
 

Ähnlich wie Java 05

55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
Stephen Chin
 
Apresentação java io
Apresentação java ioApresentação java io
Apresentação java io
Silvino Neto
 
Jug bizus (4)
Jug   bizus (4)Jug   bizus (4)
Jug bizus (4)
JugVale
 
Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010
Maurício Linhares
 

Ähnlich wie Java 05 (20)

Java9
Java9Java9
Java9
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
 
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/
 
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/
 
Java: Manipulação de Arquivos
Java:  Manipulação  de ArquivosJava:  Manipulação  de Arquivos
Java: Manipulação de Arquivos
 
java.io - fluxos (streams) e arquivos
java.io - fluxos (streams) e arquivosjava.io - fluxos (streams) e arquivos
java.io - fluxos (streams) e arquivos
 
Capítulo 15 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 15 Livro Algoritmos e Programação de Computadores Autores JR., Diler...Capítulo 15 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
Capítulo 15 Livro Algoritmos e Programação de Computadores Autores JR., Diler...
 
Apresentação java io
Apresentação java ioApresentação java io
Apresentação java io
 
Criando e Lendo Arquivos TXT com a Classe File
Criando e Lendo Arquivos TXT com a Classe FileCriando e Lendo Arquivos TXT com a Classe File
Criando e Lendo Arquivos TXT com a Classe File
 
Ficheiros texto
Ficheiros textoFicheiros texto
Ficheiros texto
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5
 
Aula7ArquivosDB.ppt
Aula7ArquivosDB.pptAula7ArquivosDB.ppt
Aula7ArquivosDB.ppt
 
Algoritmos - Aula 16 B - Arquivos
Algoritmos - Aula 16 B - ArquivosAlgoritmos - Aula 16 B - Arquivos
Algoritmos - Aula 16 B - Arquivos
 
Escrever e ler arquivos com java
Escrever e ler arquivos com javaEscrever e ler arquivos com java
Escrever e ler arquivos com java
 
Jug bizus (4)
Jug   bizus (4)Jug   bizus (4)
Jug bizus (4)
 
Jug bizus
Jug   bizusJug   bizus
Jug bizus
 
Workshop Python.2
Workshop Python.2Workshop Python.2
Workshop Python.2
 
Estrutura de dados ii
Estrutura de dados iiEstrutura de dados ii
Estrutura de dados ii
 
Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010Aulas de Java Avançado 1 - Faculdade iDez 2010
Aulas de Java Avançado 1 - Faculdade iDez 2010
 
F I C+ + L P 05
F I C+ + L P 05F I C+ + L P 05
F I C+ + L P 05
 

Mehr von samuelthiago

Interface grafica em_java_parte_v
Interface grafica em_java_parte_vInterface grafica em_java_parte_v
Interface grafica em_java_parte_v
samuelthiago
 
Interface grafica em_java_parte_iv
Interface grafica em_java_parte_ivInterface grafica em_java_parte_iv
Interface grafica em_java_parte_iv
samuelthiago
 
Interface grafica em_java_parte_iii
Interface grafica em_java_parte_iiiInterface grafica em_java_parte_iii
Interface grafica em_java_parte_iii
samuelthiago
 
Interface grafica em_java_parte_ii
Interface grafica em_java_parte_iiInterface grafica em_java_parte_ii
Interface grafica em_java_parte_ii
samuelthiago
 
Interface grafica em_java_parte_i
Interface grafica em_java_parte_iInterface grafica em_java_parte_i
Interface grafica em_java_parte_i
samuelthiago
 
Poo interacao entre_objetos_blue_j_ii
Poo interacao entre_objetos_blue_j_iiPoo interacao entre_objetos_blue_j_ii
Poo interacao entre_objetos_blue_j_ii
samuelthiago
 
Introducao a poo_com_blue_j
Introducao a poo_com_blue_jIntroducao a poo_com_blue_j
Introducao a poo_com_blue_j
samuelthiago
 
Projeto calculadora em_java
Projeto calculadora em_javaProjeto calculadora em_java
Projeto calculadora em_java
samuelthiago
 
Introducao a poo_com_blue_j
Introducao a poo_com_blue_jIntroducao a poo_com_blue_j
Introducao a poo_com_blue_j
samuelthiago
 
01 02 introdução aos bancos de dados (slides)
01 02 introdução aos bancos de dados (slides)01 02 introdução aos bancos de dados (slides)
01 02 introdução aos bancos de dados (slides)
samuelthiago
 

Mehr von samuelthiago (20)

Eclipse i (1)
Eclipse i (1)Eclipse i (1)
Eclipse i (1)
 
Html básico
Html básicoHtml básico
Html básico
 
Interface grafica em_java_parte_v
Interface grafica em_java_parte_vInterface grafica em_java_parte_v
Interface grafica em_java_parte_v
 
Interface grafica em_java_parte_iv
Interface grafica em_java_parte_ivInterface grafica em_java_parte_iv
Interface grafica em_java_parte_iv
 
Interface grafica em_java_parte_iii
Interface grafica em_java_parte_iiiInterface grafica em_java_parte_iii
Interface grafica em_java_parte_iii
 
Interface grafica em_java_parte_ii
Interface grafica em_java_parte_iiInterface grafica em_java_parte_ii
Interface grafica em_java_parte_ii
 
Interface grafica em_java_parte_i
Interface grafica em_java_parte_iInterface grafica em_java_parte_i
Interface grafica em_java_parte_i
 
Poo interacao entre_objetos_blue_j_ii
Poo interacao entre_objetos_blue_j_iiPoo interacao entre_objetos_blue_j_ii
Poo interacao entre_objetos_blue_j_ii
 
Introducao a poo_com_blue_j
Introducao a poo_com_blue_jIntroducao a poo_com_blue_j
Introducao a poo_com_blue_j
 
Projeto calculadora em_java
Projeto calculadora em_javaProjeto calculadora em_java
Projeto calculadora em_java
 
Introducao a poo_com_blue_j
Introducao a poo_com_blue_jIntroducao a poo_com_blue_j
Introducao a poo_com_blue_j
 
01 02 introdução aos bancos de dados (slides)
01 02 introdução aos bancos de dados (slides)01 02 introdução aos bancos de dados (slides)
01 02 introdução aos bancos de dados (slides)
 
Java 08
Java 08Java 08
Java 08
 
Java 07
Java 07Java 07
Java 07
 
Java 06
Java 06Java 06
Java 06
 
Java 05
Java 05Java 05
Java 05
 
Java 04
Java 04Java 04
Java 04
 
Java 03
Java 03Java 03
Java 03
 
Java 02
Java 02Java 02
Java 02
 
Java 01
Java 01Java 01
Java 01
 

Kürzlich hochgeladen

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Kürzlich hochgeladen (6)

ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 

Java 05

  • 1. Curso Superior de Tecnologia em Telemática Programação Orientada a Objetos Streams em Java Copyright©2010 Prof. César Rocha 1
  • 2. Objetivos § Explorar os conceitos fundamentais acerca do uso de streams de arquivos em Java § Principais classes, abrindo conexões de streams, leitura e gravação de objetos com streams, serialização e boas práticas de programação. § Como trocar dados com outros programas não-Java § Leitura e gravação de texto e caracteres com streams § Exercícios e vários exemplos de códigos que você deve testar visando solidificar seus conhecimentos § A diversidade de novas classes neste módulo é grande! 2
  • 3. Motivação § Vimos que uma aplicação Java possui diversos objetos cooperantes com estado e comportamento § Cada objeto é único e possui seus próprios dados § O quê fazer quando precisamos salvar todo o estado de um (ou mais) objeto(s) no disco? § Aplicação bancária, onde todos os objetos Transação devem ser gravados em um arquivo de lote diário § Um Jogo de computador, onde o estado atual de um Personagem deve ser gravado para uma sessão futura § E quando a aplicação deve trocar informações com outros sistemas (muitas vezes não-OO)? 3
  • 4. Alternativas § Em Java, basicamente, há dois formatos possíveis para gravar dados em arquivos, conforme a seguir: Œ Serialização: um arquivo irá guardar uma fila de objetos serializados. O conteúdo deste arquivo é quase ilegível, mas natural à JVM. Quando há necessidade de recuperar o objeto a partir do arquivo, ele é “inflado” e enviado para a memória, automaticamente • Texto/Caracteres: um arquivo irá guardar uma cadeia de caracteres. Neste processo, o programador cria seu formato pessoal de armazenamento e pode compreendê-lo. Usa-se, geralmente, algum delimitador para materializar este formato 4
  • 5. Passos para gravar objetos § Seguem os passos básicos necessários para escrever (enviar) um objeto para um arquivo no disco: Œ Criar um FileOutputStream: FileOutputStream fos = new FileOutputStream(“arquivo.ser”); • Criar um ObjectOutputStream: ObjectOutputStream oos = new Note a concatenação. ObjectOutputStream(fos); Ž Gravar o objeto: Cliente c1 = new Cliente(); oos.writeObject(c1); • Fechar a conexão: Dica: se arquivo.ser não existir no disco, ele será criado. oos.close(); 5
  • 6. Interface Serializable § Se sua classe precisa ser serializada, implemente a interface Serializable (marker interface) public class Cliente implements Serializable { public class Cliente implements Serializable { private String nome; private String nome; Dica: estes valores serão salvos private double salario; private double salario; em arquivo.ser public Cliente(){...} public Cliente(){...} public import java.io.FileOutputStream; import java.io.FileOutputStream; String getNome(){…} public String getNome(){…} import java.io.IOException; import java.io.IOException; public public void setNome(String n){…} void setNome(String n){…} import java.io.ObjectOutputStream; import java.io.ObjectOutputStream; public public double getSalario(){…} double getSalario(){…} public public public class GravaCliente { void setSalario(double s){…} public class GravaCliente { void setSalario(double s){…} public public String toString(){…}main( String[] args ) { public static void String toString(){…}main( String[] args ) { public static void Cliente c = new Cliente(); Cliente c = new Cliente(); try { try { FileOutputStream fos = new FileOutputStream("arquivo.ser"); FileOutputStream fos = new FileOutputStream("arquivo.ser"); ObjectOutputStream oos = new ObjectOutputStream(fos); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(c); oos.writeObject(c); oos.close(); oos.close(); } catch ( IOException e ) { e.printStackTrace(); } } catch ( IOException e ) { e.printStackTrace(); } } } } } 6
  • 7. Importante § E o que acontece quando o objeto possui variáveis membros do tipo referência (outros objetos)? § Quando um objeto é serializado, toda a árvore (hierarquia) que forma o objeto principal é serializada automaticamente § Porém, os objetos membros também devem ser serializáveis, caso contrário uma exceção do tipo NotSerializableException será gerada. § E o que acontece quando não temos acesso a classe membro para corrigir (alterar o código)? § Podemos usar a herança de implementação (extends) 7
  • 8. Passos para restaurar/ler objetos § Seguem os passos básicos necessários para ler (restaurar) um objeto a partir de um arquivo: Œ Criar um FileInputStream: FileInputStream fis = new FileInputStream(“arquivo.ser”); • Criar um ObjectInputStream: Note a concatenação. ObjectInputStream ois = new ObjectInputStream(fis); Ž Ler o objeto: Cliente novo = (Cliente) ois.readObject(); Dica: os objetos devem ser lidos • Fechar a conexão: na mesma ordem em que foram ois.close(); gravados anteriormente (fila). 8
  • 9. Passos para gravar caracteres § Seguem os passos básicos necessários para escrever (enviar) um texto para um arquivo no disco: Œ Criar um FileWriter FileWriter fw = new FileWriter(“arquivo.txt”); • Concatená-lo com um BufferedWriter: BufferedWriter bw = new BufferedWriter(fw); Ž Gravar o texto: bw.write(“Um texto”); Dica: O controle (separadores) deve ser feito pelo programador • Fechar a conexão: bw.close(); 9
  • 10. Exemplo § Lembre-se: o controle sobre toda a formatação do arquivo (separadores, quebras de linha, etc) é tarefa do programador do sistema import import java.io.BufferedWriter; java.io.BufferedWriter; import import java.io.FileWriter; java.io.FileWriter; import import java.io.IOException; java.io.IOException; public class GravaTexto { public class GravaTexto { public static void main( String[] args ) { public static void main( String[] args ) { try { try { FileWriter fw = new FileWriter("compras.txt"); FileWriter fw = new FileWriter("compras.txt"); BufferedWriter bw = new BufferedWriter(fw); BufferedWriter bw = new BufferedWriter(fw); bw.write("100"); bw.write(“#"); bw.write("Feijão"); bw.write("n"); bw.write("100"); bw.write(“#"); bw.write("Feijão"); bw.write("n"); bw.write("200"); bw.write(“#"); bw.write("Arroz"); bw.write("n"); bw.write("200"); bw.write(“#"); bw.write("Arroz"); bw.write("n"); bw.close(); bw.close(); } catch ( IOException e ) { e.printStackTrace(); } } catch ( IOException e ) { e.printStackTrace(); } } } } } 10
  • 11. Passos para ler caracteres § Seguem os passos básicos necessários para ler (restaurar) um texto a partir de um arquivo: Œ Criar um FileReader FileReader fr = new FileReader(“arquivo.txt”); • Concatená-lo com um BufferedReader: BufferedReader br = new BufferedReader(fr); Ž Lê o texto: String s = br.readLine(); Dica: quando não houver mais linhas, readLine() retornará null • Fechar a conexão: br.close(); 11
  • 12. Exemplo § O quê fazer para extrair os dados em cima de cada uma das linhas presentes no arquivo? § Use o método split() ou a classe StringTokenizer import java.io.BufferedReader; import java.io.BufferedReader; import java.io.FileReader; import java.io.FileReader; import java.io.IOException; import java.io.IOException; public class LeTexto { public class LeTexto { public static void main( String[] args ) { public static void main( String[] args ) { try { try { FileReader fr = new FileReader("compras.txt"); FileReader fr = new FileReader("compras.txt"); BufferedReader br = new BufferedReader(fr); BufferedReader br = new BufferedReader(fr); String linha = null; String linha = null; while ( (linha = br.readLine()) != null ) { while ( (linha = br.readLine()) != null ) { String[] v = linha.split("#"); String[] v = linha.split("#"); for ( String dado : v ) System.out.println(dado); for ( String dado : v ) System.out.println(dado); } } br.close(); br.close(); } catch ( IOException e ) { e.printStackTrace(); } } catch ( IOException e ) { e.printStackTrace(); } } } } } 12
  • 13. Para um bom aproveitamento: § Codifique os exemplos mostrados nestes slides e verifique pontos de dúvidas § Resolva todas as questões da lista de streams § Procure o professor ou monitor da disciplina e questione conceitos, listas, etc. § Não deixe para codificar tudo e acumular assunto para a avaliação. § Este é apenas um dos assuntos abordados na prova! 13