Curso Superior de Tecnologia em Telemática         Programação Orientada a Objetos       Streams em Java                  ...
Objetivos§ Explorar os conceitos fundamentais acerca do uso de  streams de arquivos em Java   § Principais classes, abrind...
Motivação§ Vimos que uma aplicação Java possui diversos objetos  cooperantes com estado e comportamento   § Cada objeto é ...
Alternativas§ Em Java, basicamente, há dois formatos possíveis para  gravar dados em arquivos, conforme a seguir:   Œ Seri...
Passos para gravar objetos§ Seguem os passos básicos necessários para escrever  (enviar) um objeto para um arquivo no disc...
Interface Serializable§ Se sua classe precisa ser serializada, implemente a  interface Serializable (marker interface)publ...
Importante§ E o que acontece quando o objeto possui variáveis  membros do tipo referência (outros objetos)?   § Quando um ...
Passos para restaurar/ler objetos§ Seguem os passos básicos necessários para ler  (restaurar) um objeto a partir de um arq...
Passos para gravar caracteres§ Seguem os passos básicos necessários para escrever  (enviar) um texto para um arquivo no di...
Exemplo§ Lembre-se: o controle sobre toda a formatação do  arquivo (separadores, quebras de linha, etc) é tarefa do  progr...
Passos para ler caracteres§ Seguem os passos básicos necessários para ler  (restaurar) um texto a partir de um arquivo:   ...
Exemplo§ O quê fazer para extrair os dados em cima de cada uma  das linhas presentes no arquivo?  § Use o método split() o...
Para um bom aproveitamento:§ Codifique os exemplos mostrados nestes slides e  verifique pontos de dúvidas§ Resolva todas a...
Upcoming SlideShare
Loading in …5
×

Java 05

894 views

Published on

Published in: Technology, News & Politics
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
894
On SlideShare
0
From Embeds
0
Number of Embeds
265
Actions
Shares
0
Downloads
24
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Java 05

  1. 1. Curso Superior de Tecnologia em Telemática Programação Orientada a Objetos Streams em Java Copyright©2010 Prof. César Rocha 1
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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

×