Gravação de objetos em arquivos - Programação

Propaganda
Gravação de objetos em arquivos
Programação Orientada a Objetos
Prof. Tulio Alberton Ribeiro
Instituto Federal de Santa Catarina – IFSC
campus São José
[email protected]
17 de setembro de 2014
1 / 23
java.io.Serializable;
Serialização / DeSerialização
ˆ A chave para armazenar e recuperar a informação contida em objetos
Java é através de serialização.
2 / 23
java.io.Serializable;
Serialização / DeSerialização
ˆ A chave para armazenar e recuperar a informação contida em objetos
Java é através de serialização.
ˆ Serializar a informação, é armazená-la junto com informação
suficiente para poder reconstruı́-la.
2 / 23
java.io.Serializable;
Serialização / DeSerialização
ˆ A chave para armazenar e recuperar a informação contida em objetos
Java é através de serialização.
ˆ Serializar a informação, é armazená-la junto com informação
suficiente para poder reconstruı́-la.
ˆ O stream de bytes de um objeto salvo, inclue informação suficiente
para que os campos, atributos, métodos, assim como todo o objeto
possa ser reconstruı́do.
2 / 23
java.io.Serializable;
Serialização / DeSerialização
ˆ A chave para armazenar e recuperar a informação contida em objetos
Java é através de serialização.
ˆ Serializar a informação, é armazená-la junto com informação
suficiente para poder reconstruı́-la.
ˆ O stream de bytes de um objeto salvo, inclue informação suficiente
para que os campos, atributos, métodos, assim como todo o objeto
possa ser reconstruı́do.
ˆ Um stream de bytes representa um fluxo de dados, ou um canal de
comunicação, com processos lendo em um lado do fluxo e outros
escrevendo na outra ponta, conceitualmente.
2 / 23
Serialização e Deserialização
4 / 23
Classe Pessoa.java
0
import java.io.Serializable;
1
2
3
4
public class Pessoa implements Serializable{
private String nome;
private String cpf;
5
public Pessoa(String nome, String cpf) {
this.nome = nome;
this.cpf = cpf;
}
public void imprimir(){
System.out.println("Nome: " + nome);
System.out.println("CPF: " + cpf);
}
6
7
8
9
10
11
12
13
14
}
ˆ A interface java.io.Serializable permite que objetos sejam
serializados, ou seja, permite que esses objetos sejam gravados em
arquivos, transmitidos pela rede, armazenados em memória, etc.
6 / 23
Classe Principal.java
14
15
16
public class Principal {
/* Criando um vetor de tamanho 2 */
private Pessoa[] agenda = new Pessoa[2];
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public void salvarEmDisco(){
//código próximas l^
aminas
}
public void lerDoDisco(){
//código próximas l^
aminas
}
public static void main(String[] args) {
Principal p = new Principal();
p.agenda[0] = new Pessoa("Jo~
ao", "123.734.734-33");
p.agenda[1] = new Pessoa("Maria", "354.021.456-12");
p.salvarEmDisco();
p.lerDoDisco();
}
}//fim da classe
8 / 23
Trecho de código para gravar objeto em arquivo
31
32
33
34
35
public void salvarEmDisco() {
File arquivo = new File("meusDados.txt");
try {
FileOutputStream FOS = new FileOutputStream(arquivo);
ObjectOutputStream OOS = new ObjectOutputStream(FOS);
36
// gravando o vetor 'pessoa' no arquivo chamado
meusDados.txt'
OOS.writeObject(this.pessoa);
37
38
'
39
OOS.flush(); // limpando dados em buffer
OOS.close(); // fechando fluxo de saı́da
FOS.close(); // fechando arquivo
} catch (IOException ex) {
System.err.println("erro: " + ex.toString());
}
40
41
42
43
44
45
46
}
10 / 23
Trecho de código para ler objeto de um arquivo
46
47
48
49
50
public void lerDoDisco() {
File arquivo = new File("meusDados.txt");
try {
FileInputStream FIS = new FileInputStream(arquivo);
ObjectInputStream OIS = new ObjectInputStream(FIS);
51
// Lendo os objetos de um arquivo
this.pessoa = (Pessoa[]) OIS.readObject();
OIS.close(); //fechando fluxo de entrada
FIS.close(); //fechando arquivo
52
53
54
55
56
// Uma forma de diferente do for para percorrer vetores
for (Pessoa p : this.pessoa) {
p.imprimir();
}
} catch (ClassNotFoundException ex) {
System.err.println("erro: " + ex.toString());}
catch (IOException ex) {
System.err.println("erro: " + ex.toString());}
57
58
59
60
61
62
63
64
65
}
12 / 23
Escrevendo e Lendo em arquivos.
ˆ Crie outra classe Principal, chamada Principal2 e altere os métodos
lerDoDisco e salvarEmDisco.
ˆ Copie os trechos de código das próximas lâminas e substitua no
arquivo Principal2.
ˆ Rode uma vez, e em seguida comente o método salvarEmDisco, altere
o conteúdo do arquivo meusDados.txt manualmente.
ˆ Após alterado, rode o programa.
13 / 23
Trecho de código para ler conteúdo de um arquivo
65
66
67
68
69
70
public void lerDoDisco() {
try {
InputStream is = new FileInputStream("meusDados.txt");
//InputStream is = System.in;
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
71
String s = br.readLine(); // primeira linha
while (s != null) {
System.out.println(s);
s = br.readLine();
}
br.close();
}catch(java.io.FileNotFoundException FNE){
System.out.println("Arquivos n~
ao encontrado!");}
catch (IOException ex) {
System.err.println("erro: " + ex.toString());}
72
73
74
75
76
77
78
79
80
81
82
}
Unicode..., UTF-8, ISO-8859-1, UTF-16
15 / 23
Composição da classe para ler conteúdo de um arquivo
17 / 23
Composição da classe para ler teclado ou conteúdo de um
arquivo
19 / 23
Trecho de código para gravar conteúdo em um arquivo
82
String toSave = "Informaç~
ao em texto puro a ser salva.";
83
84
85
86
87
88
public void salvarEmDisco() {
try {
OutputStream os = new FileOutputStream("meusDados.txt")
;
OutputStreamWriter osw = new OutputStreamWriter(os);
BufferedWriter bw = new BufferedWriter(osw);
89
bw.write("Info: "+ this.toSave);
90
91
bw.close();
} catch (IOException ex) {
System.err.println("erro: " + ex.toString());
}
92
93
94
95
96
}
21 / 23
Composição da classe para ler teclado ou conteúdo de um
arquivo
23 / 23
Download