47
Unidade VIII Persistência de Dados em Java Linguagem de Programação I Universidade Federal da Paraíba Centro de Informática Departamento de Informática Daniela Coelho Batista Guedes Pereira ©

Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

Unidade VIII – Persistência de

Dados em Java

Linguagem de Programação I

Universidade Federal da Paraíba

Centro de Informática

Departamento de Informática

Daniela Coelho Batista Guedes Pereira ©

Page 2: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

2

Unidade VIII

Conteúdo abordado:

Streams

Arquivos

Page 3: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

3

Streams

Abstrações de java para lidar com o fluxo de dados

Fluxos de dados ocorrem quando:

um programa lê do teclado;

um dado é enviado por uma conexão de rede;

dados são lidos ou escritos em arquivos.

Toda movimentação de bytes em java se dá

através de streams.

A vantagem de se unificar todas essas fontes de

E/S é que não é necessário saber para onde (ou

como) estão indo os bytes ou de onde eles vêm.

Page 4: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

4

Streams

Um stream é como um cano por onde fluem bytes.

Este cano pode estar conectado a uma fonte de

bytes (um arquivo, uma conexão de rede, dados

oriundos da entrada padrão) e os dados serão lidos

(ou escritos da mesma forma).

Um stream de entrada

Page 5: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

5

Streams

Independente do tipo ou de onde a informação

esteja fluindo, o algoritmo para se trabalhar com

streams é sempre o mesmo:

Leitura Escrita

Abra o stream Abra o stream

Enquanto existirem dados Enquanto existirem dados

leia dado escreva dado

Fechar stream Fechar stream

As classes que implementam streams em java

fornecem métodos para ler do stream, ir para

algum ponto do stream e fechar um stream.

Page 6: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

6

Streams

O package java.io contém um conjunto de streams

de entrada e saída que os programas podem

utilizar para ler e escrever dados.

As superclasses abstratas InputStream e

OutputStream são responsáveis por definirem o

comportamento dos streams de entrada e saída.

Existem várias subclasses de InputStream e

OutputStream que implementam tipos específicos

de streams de entrada e saída.

Page 7: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

7

Hierarquiajava.lang.Object

java.io.File

Java.io.ByteArrayInputStream

java.io.RamdomAccessFile Java.io.OutputStream Java.io.InputStream java.io.StreamTokenizer

Java.io.SequenceInputStream

Java.io.ObjectInputStream

Java.io.FileInputStream

Java.io.PipedInputStream

Java.io.FilterInputStream

Java.io.ByteArrayOutputStream

Java.io.DataInputStream

Java.io.BufferedInputStream

Java.io.PushBackInputStream

Java.io.LineNumberInputStream

Java.io.PipedOutputStream

Java.io.FileOutputStream

Java.io.FilterOutputStream

Java.io.DataOutputStream

Java.io.BufferedOutputStream

Java.io.PrintStream

Java.io.ObjectOutputStream

Page 8: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

8

Subclasses de InputStream e OutputStream

FileInputStream: Lê dados de um arquivo.

FileOutputStream: Escreve dados em um arquivo.

PipedInputStream: Implementa os componentes de

entrada de um pipe (canais de comunicação

sincronizados entre threads). O thread lê

informações do pipe via um PipedInputStream.

PipedOutputStream: Implementa os componentes

de saída de um pipe. Um thread envia dados para

outro thread via um PipedOutputStream.

Page 9: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

9

Subclasses de InputStream e OutputStream

ByteArrayInputStream: Lê dados de um array de

bytes da memória.

ByteArrayOutputStream: Escreve dados em um

array de bytes da memória.

SequenceInputStream: Concatena múltiplos

streams de entrada em um único stream de

entrada.

Page 10: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

10

Subclasses de InputStream e OutputStream

ObjectInputStream: Habilita um programa a ler

objetos serializados, através do método

readObject. O tipo de retorno deste método é

Object, portanto objetos desserializados devem ser

convertidos para o seu tipo real.

ObjectOutputStream: Habilita um programa a

gravar objetos serializados, através do método

writeObject

Page 11: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

11

Subclasses de FilterInputStream e FilterOutputStream

DataInputStream: Habilita um programa a ler dados

no formato binário de um InputStream. Lê os tipos

de dados primitivos de java, independente do

formato da máquina. Métodos desta classe:

read, readBoolean, readByte, readChar, readDouble,

readFloat, readInt, readLine, readLong, readShort,

readUTF, readUnsignedByte, readUnsignedShort, etc.

Page 12: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

12

Subclasses de FilterInputStream e FilterOutputStream

DataOutputStream: Habilita um programa a

escrever dados no formato binário em um

OutputStream. Lê os tipos de dados primitivos de

java, independente do formato da máquina.

Métodos desta classe:

flush, size, write, writeBoolean, writeByte, writeBytes,

writeChar, writeChars, writeDouble, writeFloat, writeInt,

writeLong, writeShort, writeUTF, etc.

Page 13: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

13

Outras Classes do Package java.io

File: Representa um arquivo. Habilita programas

para obter informações sobre um arquivo ou

diretório.

RandomAccessFile: Representa um arquivo de

acesso randômico.

StreamTokenizer: Divide o conteúdo de um stream

de texto de um arquivo texto de entrada em tokens

(menor unidade reconhecida por um parser -

palavras, símbolos, etc.)

Page 14: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

14

Utilizando Streams para Ler e Escrever via E/S Padrão

Em java, as fontes de dados Teclado e Vídeo são

dois streams colocados nas variáveis de classe in

(objeto da classe InputStream) e out (objeto da

classe PrintStream) de System.

PrintStream

print(String s) - Envia um string para o stream. Se o

dado não for um string mas for um tipo básico ou

um objeto que possua um método toString ele será

convertido automaticamente.

println(String s) - idêntico ao anterior, porém envia

um “\n” no final.

Page 15: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

15

Utilizando Streams para Ler e Escrever via E/S Padrão

InputStream

read( ) - Lê um byte do stream. Esse byte pode

significar muitas coisas: o primeiro byte de um

caracter unicode, o primeiro byte do primeiro

caracter de um string, o byte mais significativo de

um inteiro, etc.

Page 16: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

16

Utilizando Streams para Ler e Escrever em Arquivos

Se os seus dados forem usados somente pelo

programa Java que o gerou

Os objetos devem ser salvos, através do mecanismo de

serialização.

Se os seus dados forem usados por outros

programa

Grave os dados em arquivos binários ou texto

Page 17: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

17

Utilizando Streams para Ler e Escrever em Arquivos

Esquema de Serialização de Objetos

Para os objetos serem serializáveis a sua classe

tem que implementar a interface Serializable.

As variáveis estáticas não são serializadas.

Page 18: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

18

Utilizando Streams para Ler e Escrever em Arquivos

A interface Serializable não possui nenhum método a

implementar. Sua única finalidade é anunciar que a

classe que está implementando pode ser serializada

Quando um objeto é serializado, todos os objetos que

ele referencia nas variáveis de instância também são

serializados, desde que todas as classes implementem

Serializable.

Marque uma variável de instância de uma classe com

a palavra-chave transient se quiser que a serialização

a ignore. Ela será restaurada com nulos (para tipos

referência) ou valores padrão (para tipos primitivo).

Page 19: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

19

Utilizando Streams para Ler e Escrever em Arquivos

Esquema de Desserialização de Objetos: Restaurando um

objeto

Page 20: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

20

public void setupLer() {

//Abre arquivo para leitura

try {

fileStream = new FileInputStream("cliente.ser");

input = new ObjectInputStream(fileStream);

}

catch (EOFException eof) {

continua = false;

}

catch (IOException e) {

System.err.println("Falha na Abertura do

Arquivo para Leitura\n" +

e.toString());

System.exit(1);

}

}

Rotinas Importantes

Page 21: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

21

public void readRecords() {

//Carrega todo o conteúdo do arquivo na Coleção cadcel

try {

while (moreRecords) {

cadcel.add((Agenda)(input.readObject()));

}

} catch (EOFException eof) {

moreRecords = false;

} catch (IOException e) {

System.err.println("Erro durante leitura do

arquivo\n" + e.toString());

System.exit(1);

}catch(ClassNotFoundException c){

System.err.println("Erro durante leitura do

arquivo - Objeto Inválido\n"

+ c.toString());

}

}

Rotinas Importantes

Page 22: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

22

public void cleanupLer() {

//Fechar o arquivo, após ter sido descarregado na coleção

try {

input.close();

} catch (IOException e) {

System.err.println("Falha no Fechamento do

Arquivo durante Leitura\n"

+ e.toString());

System.exit(1);

}

dispose(); //libera os recursos

}

Rotinas Importantes

Page 23: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

23

public void setupGravar() {

//Abre arquivo para gravar

try{

output = new ObjectOutputStream(new

FileOutputStream("cliente.ser", false));

} catch (IOException e) {

System.err.println("Falha na Abertura do Arquivo

para Gravação\n" +

e.toString());

System.exit(1);

}

}

Rotinas Importantes

public FileOutputStream(File file, boolean append) throws FileNotFoundException :Cria um arquivo output stream para gravar em um arquivo representado pelo objeto File .

public ObjectOutputStream(OutputStream out) throws IOException :

Cria um ObjectOutputStream que escreve em um OutputStream específico.

Page 24: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

24

public void addRecords() {

//Carrega toda a coleção no arquivo

try {

for (Agenda a : cadcel) {

output.writeObject(a);

}

} catch (IOException e) {

System.err.println("Erro durante gravação no

arquivo\n" + e.toString());

System.exit(1);

}

}

Rotinas Importantes

Page 25: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

25

public void cleanupGravar() {

//Fechar o arquivo, após todos os objetos terem sido gravados

try {

output.flush();

output.close();

} catch (IOException e) {

System.err.println("Falha no Fechamento do

Arquivo – Durante

Gravação!!\n" + e.toString());

System.exit(1);

}

dispose(); //libera os recursos

}

Rotinas Importantes

Page 26: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

26

import javax.swing.*;

import javax.swing.border.*;

import java.awt.*;

import java.awt.event.*;

import java.io.*;

// Grava dados oriundo do teclado em um arquivo binário sequencial

public class CriaArqSeq extends JFrame{

private JButton jButton1,jButton2;

private JLabel jLabel1, jLabel2, jLabel3,jLabel4;

private JPanel jPanel1;

private JTextField jTextField1, jTextField2;

private JTextField jTextField3, jTextField4;

// habilita saída de dados para um arquivo

private DataOutputStream output;

public CriaArqSeq() { //construtor

super("Grava Arquivo de Contas");

setup();

initComponents();

}

... //continua

Page 27: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

27

public void setup(){

//Abre arquivo

try{

output = new DataOutputStream(

new FileOutputStream("cliente.dat",true));

}catch(IOException e){

System.err.println("Falha na Abertura do

Arquivo\n" + e.toString());

System.exit(1);

}

}

... //continua

Page 28: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

28

//envia dados para o arquivo, limpa o

// frame, e fecha o arquivo

public void cleanup(){

if(!jTextField1.getText().equals(""))

addRecord();

try{

output.flush();

output.close();

}catch (IOException e){

System.err.println("Falha no Fechamento do

Arquivo\n" + e.toString());

System.exit(1);

}

}

... //continua

Page 29: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

29

//Grava dados no arquivo

public void addRecord(){

int acct = 0;

double d;

acct = (new Integer(jTextField1.getText())).intValue();

try{

if (acct > 0){

output.writeInt(acct);

output.writeUTF(jTextField2.getText());

output.writeUTF(jTextField3.getText());

d = (new Double(jTextField4.getText())).doubleValue();

output.writeDouble(d);

}

}catch(IOException e){

System.err.println("Erro durante gravação no arquivo\n" +

e.toString());

System.exit(1);

}

//Limpa os TextFields

jTextField1.setText(""); jTextField2.setText("");

jTextField3.setText(""); jTextField4.setText("");

}

... //continua

Page 30: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

30

//trata os eventos dos botões

private void

jButton1ActionPerformed(java.awt.event.ActionEvent evt)

{

addRecord();

}

private void

jButton2ActionPerformed(java.awt.event.ActionEvent evt)

{

cleanup(); //grava dados, fecha arquivo

dispose(); //libera os recursos

System.exit(0);

}

... //continua

Page 31: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

31

//monta a interface

private void initComponents() {

jPanel1 = new JPanel();

jLabel1 = new JLabel();

jTextField1 = new JTextField();

jLabel2 = new JLabel();

jTextField2 = new JTextField();

jLabel3 = new JLabel();

jTextField3 = new JTextField();

jLabel4 = new JLabel();

jTextField4 = new JTextField();

jButton1 = new JButton();

jButton2 = new JButton();

setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

jPanel1.setLayout(new GridLayout(5, 2));

jLabel1.setFont(new Font("Tahoma", 0, 14));

jLabel1.setText("Conta:");

jLabel1.setBorder(new SoftBevelBorder(BevelBorder.RAISED));

jPanel1.add(jLabel1);

... //continua

Page 32: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

32

//monta a interface (cont.)

jTextField1.setFont(new Font("Tahoma", 0, 14));

jTextField1.setBorder(newSoftBevelBorder(BevelBorder.RAISED));

jPanel1.add(jTextField1);

jLabel2.setFont(new Font("Tahoma", 0, 14));

jLabel2.setText("Nome:");

jLabel2.setBorder(new SoftBevelBorder(BevelBorder.RAISED));

jPanel1.add(jLabel2);

jTextField2.setFont(new java.awt.Font("Tahoma", 0, 14));

jTextField2.setBorder(newSoftBevelBorder(BevelBorder.RAISED));

jPanel1.add(jTextField2);

jLabel3.setFont(new Font("Tahoma", 0, 14));

jLabel3.setText("Sobrenome:");

jLabel3.setBorder(new SoftBevelBorder(BevelBorder.RAISED));

jPanel1.add(jLabel3);

jTextField3.setFont(new Font("Tahoma", 0, 14));

jTextField3.setBorder(newSoftBevelBorder(BevelBorder.RAISED));

jPanel1.add(jTextField3);

... //continua

Page 33: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

33

//monta a interface (cont.)

jLabel4.setFont(new Font("Tahoma", 0, 14));

jLabel4.setText("Saldo:");

jLabel4.setBorder(new SoftBevelBorder(BevelBorder.RAISED));

jPanel1.add(jLabel4);

jTextField4.setFont(new Font("Tahoma", 0, 14));

jTextField4.setBorder(newSoftBevelBorder(BevelBorder.RAISED));

jPanel1.add(jTextField4);

jButton1.setFont(new Font("Tahoma", 0, 14));

jButton1.setText("Gravar");

jButton1.setActionCommand("Next");

jButton1.setBorder(new SoftBevelBorder(BevelBorder.RAISED));

jButton1.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent evt) {

jButton1ActionPerformed(evt);

}

});

jPanel1.add(jButton1);

... //continua

Page 34: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

34

//monta a interface (cont.)

jButton2.setFont(new Font("Tahoma", 0, 14));

jButton2.setText("Sair");

jButton2.setBorder(new SoftBevelBorder(BevelBorder.RAISED));

jButton2.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent evt) {

jButton2ActionPerformed(evt);

}

});

jPanel1.add(jButton2);

GroupLayout layout = new GroupLayout(getContentPane());

getContentPane().setLayout(layout);

layout.setHorizontalGroup(

layout.createParallelGroup(Alignment.LEADING)

.addGap(0, 400, Short.MAX_VALUE)

.addGroup(layout.createParallelGroup

(GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGap(0, 118, Short.MAX_VALUE)

.addComponent(jPanel1, GroupLayout.PREFERRED_SIZE,

GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)

.addGap(0, 118, Short.MAX_VALUE)))

);

Page 35: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

35

//monta a interface (cont.)

layout.setVerticalGroup(

layout.createParallelGroup(GroupLayout.Alignment.LEADING)

.addGap(0, 300, Short.MAX_VALUE)

.addGroup(layout.createParallelGroup(

GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGap(0, 92, Short.MAX_VALUE)

.addComponent(jPanel1, GroupLayout.PREFERRED_SIZE,

GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)

.addGap(0, 93, Short.MAX_VALUE)))

);

pack();

} //fim do método initComponents

Page 36: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

36

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

new CriaArqSeq().setVisible(true);

}

});

}

} //fim da classe CriaArqSeq

Page 37: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

37

import javax.swing.*;

import javax.swing.border.*;

import java.awt.*;

import java.awt.event.*;

import java.io.*;

//Lê dados oriundo de um arquivo binário e mostra em uma janela

public class LerArqSeq extends JFrame{

private JButton jButton1,jButton2;

private JLabel jLabel1, jLabel2, jLabel3,jLabel4;

private JPanel jPanel1;

private JTextField jTextField1, jTextField2;

private JTextField jTextField3, jTextField4;

//arquivo de onde os dados serão lidos

private DataInputStream input;

private boolean moreRecords = true;

public LerArqSeq() { //construtor

super(“Ler Arquivo de Contas");

setup();

initComponents();

}

... //continua

Page 38: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

38

public void setup(){

//Abre arquivo

try{

input = new DataInputStream(

new FileInputStream("cliente.dat"));

}catch(IOException e){

System.err.println("Falha na Abertura do

Arquivo\n" + e.toString());

System.exit(1);

}

}

... //continua

Page 39: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

39

//fecha o arquivo

public void cleanup(){

try{

input.close();

}catch (IOException e){

System.err.println("Falha no Fechamento do

Arquivo\n" + e.toString());

System.exit(1);

}

}

... //continua

Page 40: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

40

//Ler dados do arquivo

public void readRecord(){

int account;

String first, last;

double balance;

try{

account = input.readInt();

first = input.readUTF();

last = input.readUTF();

balance = input.readDouble();

jTextField1.setText(String.valueOf(account));

jTextField2.setText(String.valueOf(first));

jTextField3.setText(String.valueOf(last));

jTextField4.setText(String.valueOf(balance));

}catch(EOFException eof){

moreRecords = false;

}

catch(IOException e){

System.err.println("Erro durante leitura do arquivo\n" +

e.toString());

System.exit(1);

}

}

... //continua

Page 41: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

41

//trata os eventos dos botões

private void

jButton1ActionPerformed(java.awt.event.ActionEvent evt)

{

readRecord();

}

private void

jButton2ActionPerformed(java.awt.event.ActionEvent evt)

{

cleanup(); //fecha arquivo

dispose(); //libera os recursos

System.exit(0);

}

... //continua

Page 42: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

42

//monta a interface

private void initComponents() {

jPanel1 = new JPanel();

jLabel1 = new JLabel();

jTextField1 = new JTextField();

jLabel2 = new JLabel();

jTextField2 = new JTextField();

jLabel3 = new JLabel();

jTextField3 = new JTextField();

jLabel4 = new JLabel();

jTextField4 = new JTextField();

jButton1 = new JButton();

jButton2 = new JButton();

setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

jPanel1.setLayout(new GridLayout(5, 2));

jLabel1.setFont(new Font("Tahoma", 0, 14));

jLabel1.setText("Conta:");

jLabel1.setBorder(new SoftBevelBorder(BevelBorder.RAISED));

jPanel1.add(jLabel1);

... //continua

Page 43: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

43

//monta a interface (cont.)

jTextField1.setFont(new Font("Tahoma", 0, 14));

jTextField1.setBorder(newSoftBevelBorder(BevelBorder.RAISED));

jPanel1.add(jTextField1);

jLabel2.setFont(new Font("Tahoma", 0, 14));

jLabel2.setText("Nome:");

jLabel2.setBorder(new SoftBevelBorder(BevelBorder.RAISED));

jPanel1.add(jLabel2);

jTextField2.setFont(new java.awt.Font("Tahoma", 0, 14));

jTextField2.setBorder(newSoftBevelBorder(BevelBorder.RAISED));

jPanel1.add(jTextField2);

jLabel3.setFont(new Font("Tahoma", 0, 14));

jLabel3.setText("Sobrenome:");

jLabel3.setBorder(new SoftBevelBorder(BevelBorder.RAISED));

jPanel1.add(jLabel3);

jTextField3.setFont(new Font("Tahoma", 0, 14));

jTextField3.setBorder(newSoftBevelBorder(BevelBorder.RAISED));

jPanel1.add(jTextField3);

... //continua

Page 44: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

44

//monta a interface (cont.)

jLabel4.setFont(new Font("Tahoma", 0, 14));

jLabel4.setText("Saldo:");

jLabel4.setBorder(new SoftBevelBorder(BevelBorder.RAISED));

jPanel1.add(jLabel4);

jTextField4.setFont(new Font("Tahoma", 0, 14));

jTextField4.setBorder(newSoftBevelBorder(BevelBorder.RAISED));

jPanel1.add(jTextField4);

jButton1.setFont(new Font("Tahoma", 0, 14));

jButton1.setText(“Next");

jButton1.setBorder(new SoftBevelBorder(BevelBorder.RAISED));

jButton1.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent evt) {

jButton1ActionPerformed(evt);

}

});

jPanel1.add(jButton1);

... //continua

Page 45: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

45

//monta a interface (cont.)

jButton2.setFont(new Font("Tahoma", 0, 14));

jButton2.setText("Sair");

jButton2.setBorder(new SoftBevelBorder(BevelBorder.RAISED));

jButton2.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent evt) {

jButton2ActionPerformed(evt);

}

});

jPanel1.add(jButton2);

GroupLayout layout = new GroupLayout(getContentPane());

getContentPane().setLayout(layout);

layout.setHorizontalGroup(

layout.createParallelGroup(Alignment.LEADING)

.addGap(0, 400, Short.MAX_VALUE)

.addGroup(layout.createParallelGroup

(GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGap(0, 118, Short.MAX_VALUE)

.addComponent(jPanel1, GroupLayout.PREFERRED_SIZE,

GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)

.addGap(0, 118, Short.MAX_VALUE)))

);

Page 46: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

46

//monta a interface (cont.)

layout.setVerticalGroup(

layout.createParallelGroup(GroupLayout.Alignment.LEADING)

.addGap(0, 300, Short.MAX_VALUE)

.addGroup(layout.createParallelGroup(

GroupLayout.Alignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addGap(0, 92, Short.MAX_VALUE)

.addComponent(jPanel1, GroupLayout.PREFERRED_SIZE,

GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)

.addGap(0, 93, Short.MAX_VALUE)))

);

pack();

} //fim do método initComponents

... //continua

Page 47: Unidade VIII Dados em Javawiki.cbatista.net/lib/exe/fetch.php/unidadeviii1_2_comserializacao.pdf · 3 Streams Abstrações de java para lidar com o fluxo de dados Fluxos de dados

47

public static void main(String args[]) {

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

new LerArqSeq().setVisible(true);

}

});

}

} //fim da classe LerArqSeq