BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

31
BC-0502 BC-0502 Metodologia e Algoritmos Metodologia e Algoritmos Computacionais Computacionais Santo André, Abril de 2008. Arquivos em Java

Transcript of BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

Page 1: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

BC-0502BC-0502

Metodologia e Algoritmos Metodologia e Algoritmos

ComputacionaisComputacionais

Santo André, Abril de 2008.

Arquivos em Java

Page 2: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

2

RoteiroRoteiro

Hierarquia de Classes Java

Streams (fluxos)

Tipos de Arquivos

Arquivos Texto

Serialização

Page 3: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

3

Hierarquia de Classes JavaHierarquia de Classes Javahttp://java.sun.com/j2se/1.5.0/docs/api/overview-tree.htmlhttp://java.sun.com/j2se/1.5.0/docs/api/overview-tree.html

Page 4: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

4

Streams (Fluxos)Streams (Fluxos)

Java enxerga um arquivo como sendo um fluxo (stream) seqüencial de bytes

Stream é um conceito poderoso que simplifica o tratamento de operações de entrada e saída de dados (I/O)

Streams são usados também para comunicação entre computadores em uma rede

Java tem mais de 60 tipos de streams

Ou seja, mais de 60 classes para tratar de streams!

Page 5: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

5

Streams de BytesStreams de Bytes

Os programas usam streams de bytes para realizar entrada e saída de bytes (ou seja, seqüências de 8 bits)

Entrada

Super-classe: InputStream

Várias sub-classes para entrada de dados

Saída

Super-classe: OutputStream

Várias sub-classes para saída de dados

Page 6: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

6

Streams de CaracteresStreams de Caracteres

Programas usam streams de caracteres para realizar operações de entrada e saída de dados em caracteres de 16 bits (Unicode)

Entrada

Super-classe: Reader

Várias sub-classes para entrada de dados

Saída

Super-classe: Writer

Várias sub-classes para saída de dados

Page 7: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

7

Classes InputStreamClasses InputStream

Page 8: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

8

Classes InputStreamClasses InputStream

Page 9: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

9

Classes OutputStreamClasses OutputStream

Page 10: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

10

Classes OutputStreamClasses OutputStream

Page 11: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

11

Classes ReaderClasses Reader

Page 12: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

12

Classes ReaderClasses Reader

Page 13: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

13

Classes WriterClasses Writer

Page 14: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

14

Classes WriterClasses Writer

Page 15: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

15

Streams de Conexão e de Streams de Conexão e de CadeiaCadeia

Streams de conexão (connection streams)Conexão com fonte ou destino de dadosEspecializados em escrever e ler dados em arquivosMétodos de muito baixo nível

Ex: Escrever e ler um único byte

Streams de cadeia (chain streams)Funciona se encadeados com streams de conexãoProporcionam várias funcionalidades adicionaisMétodos mais sofisticados

Ex.: Ler e escrever um objeto inteiro ou ler e escrever uma linha de texto

Page 16: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

16

Persistência de ObjetosPersistência de ObjetosLendo e Escrevendo DadosLendo e Escrevendo Dados

Existem várias classes para trabalhar com arquivos em Java

Classes existentes na API podem simplificar muitas atividades

Duas abordagens são mais comuns para implementar persistência de objetos

Armazenar dados em arquivos de texto

Usar serialização

Page 17: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

17

Arquivos TextoArquivos Texto

Os atributos dos objetos são salvos em arquivos um por um, separados por algum caractere, como “,” (virgula)

Um arquivo texto pode ser editado e visualizado facilmente por humanos

Simples para fazer intercâmbio de dados entre programas diferentes

Page 18: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

18

Leitura de arquivo textoLeitura de arquivo textocom classes Readercom classes Reader

Leitura:

FileReader: stream de conexãoUma operação de entrada lê um caractere

BufferedReader: entrada buferizadaUma operação de entrada lê vários caracteres

Exemplo de códigoFileReader f = new FileReader(“aquivo.txt");

BufferedReader br = new BufferedReader(f);

String linha = br.readLine();

Page 19: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

19

Exemplo: Turma de alunosExemplo: Turma de alunos

public void importarAlunos(Turma minhaTurma){

BufferedReader br = new BufferedReader(new FileReader("turma.txt"));

String linha;

String[] campos = null;

while ((linha = br.readLine()) != null){

campos = linha.split(":");

String nome = campos[0];

int idade = Integer.parseInt(campos[1]);

double nota = Double.parseDouble(campos[2].replace(",", "."));

minhaTurma.incluirAluno(nome, idade, nota);

}

br.close();

}

Page 20: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

20

Escrita em arquivo textoEscrita em arquivo textocom classes Writercom classes Writer

Leitura:

FileWriter: stream de conexão

Uma operação de saída grava um caractere

BufferedWriter: saída buferizada

Uma operação de saída não grava necessariamente os dados, que de tempos em tempos são enviados ao destino (disco)

PrintWriter: saída de objetos em texto

Oferece vários métodos para gravar dados

Exemplo de códigoFileWriter f = new FileWriter(“arquivo.txt");

PrintWriter pw = new PrintWriter (f);

pw.println(“Hello World!”);

Page 21: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

21

Exemplo: Turma de alunosExemplo: Turma de alunos

public void exportarAlunos(Aluno[] alunos, int nalunos){

PrintWriter pw = new PrintWriter(new FileWriter("turma.txt"));

for (int i = 0; i < nalunos; i++){

String linha = String.format("%s:%d:%.1f", alunos[i].getNome(), alunos[i].getIdade(), alunos[i].getNota());

pw.println(linha);

}

pw.flush();

pw.close();

}

Page 22: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

22

Arquivo TextoArquivo Texto

Arthur:9:10,0

Gabriela:14:10,0

Nil:38:10,0

Maria:20:8,0

José:18:5,0

Joana:17:7,0

Page 23: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

23

SerializaçãoSerialização

Serialização é o processo de transformar um objeto na memória para um streams de bytes

Deserialização é o processo inverso, de reconstruir um objeto a partir de um stream de bytes para o mesmo estado que o objeto estava antes de ser serializado

Para um objeto ser serializado, a sua classe ou alguma super-classe deve implementar a interface Serializable

Page 24: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

24

SerializaçãoSerialização

Serialização (escrita)

FileOutputStream: stream de conexão

ObjectOutputStream: Stream que faz a serialização

Exemplo de códigoFileOutputStream out = new

FileOutputStream(“save.ser”);

ObjectOutputStream oos = new ObjectOutputStream(out);

oos.writeObject(new Date());

oos.close();

Page 25: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

25

Exemplo: Turma de alunosExemplo: Turma de alunos

public void exportarAlunos(Aluno[] alunos, int nalunos){

ObjectOutputStream os = new ObjectOutputStream (new FileOutputStream("Turma.ser"));

os.writeObject(nalunos);

for (int i = 0; i < nalunos; i++){

os.writeObject(alunos[i]);

}

os.close();

}

Page 26: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

26

Classe aluno deve ser Classe aluno deve ser serializávelserializável

public class Aluno implements Serializable {

….

}

Page 27: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

27

DeserializaçãoDeserialização

Deserialização (leitura)FileInputStream: stream de conexãoObjectInputStream: Stream que faz a deserialização

Exemplo de código

FileInputStream in = new FileInputStream( “save.ser” );

ObjectInputStream ois = new ObjectInputStream( in );

Date d = (Date) ois.readObject();

ois.close();

Page 28: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

28

Exemplo: Turma de alunosExemplo: Turma de alunos

public void importarAlunos(Turma minhaTurma){

ObjectInputStream os = new ObjectInputStream (new FileInputStream("Turma.ser"));

int numero = (Integer) os.readObject();

for (int i = 0; i < numero; i++){

Aluno a = (Aluno) os.readObject();

minhaTurma.incluirAluno(a);

}

os.close();

}

Page 29: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

29

Serialização de objetos Serialização de objetos compostoscompostos

Se um objeto possui referências para outros objetos (ou arrays), esses objetos são também serializados

Se esses objetos, por sua vez, possuem referências para outros objetos, esses também são serializados

E assim por diante

Essa abordagem pode ser usada, por exemplo, para fazer cópias de objetos

Page 30: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

30

Arquivo SerializadoArquivo Serializado

¼φsrjava.lang.IntegerΓáñ≈üç8[1]Ivaluexrjava.lang.Numberå¼òöαï[1]xp[1]srturma.Aluno▓≥Zu¬wkr[1]

IidadeD notaL nometLjava/lang/String;xp@$tMariasq~ @"tJosé

Page 31: BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de 2008. Arquivos em Java.

31

BC-0502BC-0502

Metodologia e Algoritmos Metodologia e Algoritmos

ComputacionaisComputacionais

Santo André, Abril de 2008.

Arquivos em Java