• Nenhum resultado encontrado

de Objetos de Objetos

N/A
N/A
Protected

Academic year: 2021

Share "de Objetos de Objetos"

Copied!
24
0
0

Texto

(1)

Java e Orientação a Objetos Java e Orientação a Objetos

Manipulando Arquivos Manipulando Arquivos

de Objetos de Objetos

Prof. Giuliano Prado de Morais Giglio, M.Sc.

A Plataforma Java A Plataforma Java

Programação Orientada a Programação Orientada a

Objetos em Java

Objetos em Java

(2)

Criando classe de persistência

Serialização de objetos – interface Serializable Class ObjectOutputStream e ObjectInputStream

„ Java permite a gravação direta de objetos em disco ou seu envio através da rede.

• Neste caso o objeto deve declarar implementar java.io.Serializable.

„ Um objeto que implementa a interface

Serializable poderá ser gravado em qualquer stream usando o método writeObject() de

ObjectOutputStream e poderá ser recuperado de qualquer stream usando o método

readObject() de ObjectInputStream.

(3)

Criando classe de persistência

„ Devemos criar duas classes:

• Uma classe para escrita (gravação)

• Uma classe para leitura (recuperação)

„ Classe ArquivoOut → escrita

„ Classe ArquivoIn → leitura

(4)

Classe ArquivoOut

Interface

„ Atributos

private FileOutputStream fout = null;

private ObjectOutputStream objOut = null;

„ Métodos

public void abrir() public void fechar()

public void adicionar(Automovel auto)

(5)

Classe ArquivoOut

Implementação

public void abrir() {

fout = new FileOutputStream("ArqAutomoveis.txt");

objOut = new ObjectOutputStream(fout);

}

public void fechar() {

objOut.close();

fout.close();

}

ATENÇÃO

PARA AS

EXCEÇÕES!!!

(6)

Classe ArquivoOut

Implementação

public void adicionar (Automovel auto) {

objOut.writeObject(auto);

}

ATENÇÃO

PARA AS

EXCEÇÕES!!!

(7)

Classe ArquivoIn

Interface

„ Atributos

private FileInputStream fin = null;

private ObjectInStream objIn = null;

„ Métodos

public void abrir() public void fechar()

public Automovel getAutomovel()

(8)

Classe ArquivoOut

Implementação

public void abrir() {

fin = new FileInputStream("ArqAutomoveis.txt");

objIn = new ObjectInputStream(fin);

}

public void fechar() {

objIn.close();

fin.close();

}

ATENÇÃO

PARA AS

EXCEÇÕES!!!

(9)

Classe ArquivoOut

Implementação

public Automovel getAutomovel () {

return (Automovel)objIn.readObject();

}

ATENÇÃO

PARA AS

EXCEÇÕES!!!

(10)

No Formulário de Cadastro

public class frmAutomovel extends javax.swing.JFrame

{

private Automovel auto = null;

private ArquivosOut arq = new ArquivosOu();

public frmAutomovel() { initComponents();

arq.abrir();

...

}

private void btSairActionPerformed

(java.awt.event.ActionEvent evt) {

arq.fechar();

...

}

private void btAdicionarActionPerformed

(java.awt.event.ActionEvent evt) {

auto = new Automovel(...);

arq.adicionar(auto);

}

ATENÇÃO COM

TRY..CATCH

(11)

Criação de um

formulário de consulta

(12)

No Formulário de Consulta

public class frmConsulta extends javax.swing.JFrame {

private ArquivosIn arq = new ArquivosIn();

public frmConsulta() { initComponents();

arq.abrir();

...

}

private void formWindowClosing (java.awt.event.WindowEvent evt) { arq.fechar();

}

ATENÇÃO COM

TRY..CATCH

(13)

No Formulário de Consulta

private void btVisualActionPerformed (java.awt.event.ActionEvent evt){

boolean continua = true;

Automovel auto = null;

while (continua) {

try {

auto = arq.getAutomovel();

if (auto != null)

tMemo.append(auto.getDados() + "\n\n");

} catch (EOFException ex){

continua = false;

}

catch (IOException ex) { continua = false;

} }

arq.fechar();

}

(14)

Testando a aplicação

1. Faça o cadastro de pelo menos 3 objetos;

2. Depois chame o formulário de

Consulta e visualize seus objetos;

3. Confere se todos foram inseridos corretamente;

4. Feche a aplicação;

5. Repita os passos de 1 a 3 e verifique se TODOS os objetos estão inseridos

(os da 1ª e da 2ª execução).

(15)

Inserção Múltipla

„ Como podemos solucionar o problema de se guardar todos os objetos de todos as execuções?

„ Por que esse problema de persistência

está ocorrendo?

(16)

Inserção Múltipla

Passos para uma solução

„ Crie uma atributo private para uma lista de Automovel na classe de “escrita”;

„ Faça um método private void Preparar(). Nele:

• Abra o arquivo de dados para leitura;

• Instancie a sua lista;

• Varrer o arquivo até o final, pegando cada um dos seus objetos e inserindo na lista;

• Feche o arquivo no final

(17)

Inserção Múltipla

Passos para uma solução

„ Modifique seu método void abrir():

• Chame o método preparar() antes da abertura dos arquivos;

• Após a abertura, varrer a lista de objetos, gravando no arquivo;

• Quando esta escrita acabar, o arquivo continuará aberto e posicionado para as próximas gravações;

„ Refaça os passos de testes.

(18)

Utilizando JTable para

visualizar os objetos

(19)

Mudança no formulário de consulta

jTextArea

jTable

(20)

Montagem JTable

← Botão Direito

Propriedades

(21)

Operacionalizando JTable

„ Modifique seu método void getAutomovel():

public Object[ ] getAutomovel() {

SimpleDateFormat formatador = new

SimpleDateFormat ("dd/MM/yyyy");

Object vet[ ] = {placa, modelo,

formatador.format(data_fabri), motor, valor, categoria};

return vet;

}

(22)

„ Crie um método que retorna todos os automóveis do arquivo(ArquivosIn):

public List getTodosAutomoveis()

{

List<Automovel> lista = new ArrayList<Automovel>();

abrir();

boolean continua = true;

Automovel auto = null;

while (continua) {

try {

auto = (Automovel)objIn.readObject();

lista.add(auto);

} catch (EOFException ex){

continua = false;

}

catch (IOException ex) { continua = false;

} catch (ClassNotFoundException ex) { }

}

fechar();

return lista;

}

(23)

List<Automovel> lista = new ArrayList<Automovel>();

try {

lista = arq.getTodosAutomoveis();

DefaultTableModel modelo = (DefaultTableModel)

jTable1.getModel();

for(int i = 0; i< lista.size();i++) {

modelo.addRow( lista.get(i).getAutomovel() );

}

} catch (FileNotFoundException ex) { } catch (IOException ex) {

}

No botão “Visualizar”

(24)

private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {

String str = "";

int linha = jTable1.getSelectedRow();

for (int i = 0; i < jTable1.getColumnCount();i++) {

str += jTable1.getColumnName(i) + " : " + jTable1.getModel().getValueAt(linha, i) + "\n";

}

jMemo.setText(str);

}

Ao clicar numa linha...

Referências

Documentos relacionados

Segundo Cheng (2007) a casa da qualidade (planejamento do produto) é utilizada para traduzir a qualidade demandada pelos clientes em requisitos técnicos do produto

Diante dos discursos levantados por tais instituições, sejam elas, os Museus, os Institutos, ou as Faculdades, a obra de Schwarz 1993, fornece amplo conhecimento sobre a formação

Local de realização da avaliação: Centro de Aperfeiçoamento dos Profissionais da Educação - EAPE , endereço : SGAS 907 - Brasília/DF. Estamos à disposição

A estabilidade do corpo docente permanente permite atribuir o conceito muito bom, segundo os parâmetros da área, para o item 2.2 (pelo menos 75% dos docentes permanentes foram

Apenas foram submetidos aos protocolos de provocação e/ou dessensibilização com AAS, os pacientes com asma controlada e, portanto, os pacientes que tinham asma grave não

Para Piaget, a forma de raciocinar e de aprender da criança passa por estágios. Por volta dos dois anos, ela evolui do estágio sensório motor, em que a ação envolve os

Por último, temos o vídeo que está sendo exibido dentro do celular, que é segurado e comentado por alguém, e compartilhado e comentado no perfil de BolsoWoman no Twitter. No

Este artigo está dividido em três partes: na primeira parte descrevo de forma sumária sobre a importância do museu como instrumento para construção do conhecimento, destaco