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

Post on 22-Apr-2015

106 views 0 download

Transcript of 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

2

RoteiroRoteiro

Hierarquia de Classes Java

Streams (fluxos)

Tipos de Arquivos

Arquivos Texto

Serialização

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

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!

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

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

7

Classes InputStreamClasses InputStream

8

Classes InputStreamClasses InputStream

9

Classes OutputStreamClasses OutputStream

10

Classes OutputStreamClasses OutputStream

11

Classes ReaderClasses Reader

12

Classes ReaderClasses Reader

13

Classes WriterClasses Writer

14

Classes WriterClasses Writer

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

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

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

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();

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();

}

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!”);

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();

}

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

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

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();

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();

}

26

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

public class Aluno implements Serializable {

….

}

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();

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();

}

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

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é

31

BC-0502BC-0502

Metodologia e Algoritmos Metodologia e Algoritmos

ComputacionaisComputacionais

Santo André, Abril de 2008.

Arquivos em Java