bc-0502 metodologia e algoritmos computacionais santo andré, abril de 2008. arquivos em java
TRANSCRIPT
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