Your SlideShare is downloading. ×
  • Like
Java 05
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply
Published

 

Published in Technology , News & Politics
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
728
On SlideShare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
20
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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