Escolar Documentos
Profissional Documentos
Cultura Documentos
14 Aula Persistência-Compressed
14 Aula Persistência-Compressed
Serialização
Cecilia E. Gi
uffra P.
Sobre a aula de hoje
Ø Objetivo da aula: apresentar conteúdos sobre
persistência de dados e objetos (serialização).
Ø Metodologia: Aula expositiva, com recursos de
imagem, exemplos e trabalhos práticos em aula
Ø Textos base: DEITEL, Harvey M.; DEITEL, Paul J.
Java como programar. Porto Alegre: Bookman,
2001. 1202p.
Onde estamos?
Introdução ao desenvolvimento de sistemas reusáveis de software
Sistema de gerenciamento de
bancos de dados (SGBD):
Bancos de Grupo de arquivos
- coleção de programas projetados
dados relacionados. para criar e gerenciar banco de
dados.
Arquivos e fluxos
Ø Cada arquivo é um fluxo sequencial de bytes
Ø Cada sistema operacional fornece um mecanismo
para determinar o término de um arquivo
Ø Marcador de fim de arquivo ou uma contagem do
total de bytes no arquivo que é registrado
Ø Programa Java que processa fluxo de bytes recebe
indicação do SO quando alcança o fim do fluxo.
Fluxos baseados em bytes e
caracteres
Arquivos criados usando
Fluxos de entrada e fluxos baseados em bytes são
Baseados saída de bytes, arquivos binários: Lidos por
em Bytes representan dados no programas que entendem o
formato binário conteúdo específico e
ordenamento dele.
Fluxos de entrada e
Exemplo: valor 5 armazenado utilizando fluxo baseado em bytes seria
Arquivos criados usando
Baseados armazenado no formato binário do valor numérico 5.
saída de caracteres para fluxos baseados em
em arquivos, representan
caracteres são arquivos de
Caracteres dados como sequência texto: Podem ser lidos por
101 editores de texto.
de caracteres.
Fluxos baseados em bytes e
caracteres
Arquivos criados usando
Exemplo: valor 5 armazenado utilizando fluxo baseado em caracteres
Fluxos de entrada e fluxos baseados em bytes são
seria armazenado no formato binário de caractere 5
Baseados saída de bytes, arquivos binários: Lidos por
00000000 00110101
em Bytes representan dados no programas que entendem o
(representação binária do valor numérico 53, que indica o caractere 5
formato binário conteúdo específico e
em Unicode) ordenamento dele.
Caminho absoluto: Contém todos os diretórios desde o raiz que levam a um arquivo ou
diretório específico.
Caminho relativo: normalmente inicia do diretório em que o aplicativo começou a execução.
Métodos File
Método Descrição
boolean canRead() Retorna true se um arquivo for legível pelo aplicativo atual.
boolean canWrite() Retorna true se um arquivo for gravável pelo aplicativo atual.
boolean exists() Retorna true se o arquivo ou diretório representado pelo
objeto File existir.
boolean isFile() Retorna true se o nome especificado como o argumento para o
construtor File for um arquivo.
boolean isDirectory() Retorna true se o nome especificado como o argumento para o
construtor File for um diretório.
boolean isAbsolute() Retorna true se os argumentos especificados para o construtor
File indicarem um caminho absoluto
Métodos File
Método Descrição
String getAbsolutePath() Retorna uma string com o caminho absoluto do arquivo ou
diretório.
String getName() Retorna uma string com o nome do arquivo ou diretório.
String getPath() Retorna uma string com o caminho do arquivo ou diretório.
String getParent() Retorna uma string com o diretório pai do arquivo ou diretório
(diretório em que está localizado).
long length() Retorna o comprimento do arquivo, em bytes. Se o objeto File
representar um diretório, um valor não especificado é retornado.
long lastModified() Retorna uma representação dependente de plataforma da data/hora
em que o arquivo ou diretório for modificado pela última vez. O
valor retornado é útil somente para comparação com outros valores
retornados por esse método.
String[] list() Retorna um array de strings que representam o conteúdo de um
diretório.
Demonstrando
classe File
Demonstrando
classe File
Demonstrando
classe File
Arquivos de texto de acesso
sequencial
Ø São arquivos nos quais registros são armazenados na
ordem pelo campo de chave de registro.
Ø Podem ser criados como arquivos de texto ou arquivos
binários
Criando um arquivo de texto
de acesso sequencial
Ø Programa cria arquivo simples de acesso sequencial
que poderia ser utilizado em um sistema de contas a
receber para monitorar valores devidos pelos
clientes a uma empresa
Encapsula informações sobre registro do cliente
Classe
AccountRecord Contém variáveis de instância private account, firstName, lastName
e balance, e métodos set/get para acessá-las
Objeto Formatter gera saída para Strings formatadas.
Pode gerar saída para vários locais (tela ou arquivo)
Classe Declara objeto da
CreateTextFile classe Formatter. Utiliza método format para gravar texto formatado no
arquivo
Utiliza método close para fechar objeto Formatter.
Criando um arquivo de texto
de acesso sequencial
Ø Possíveis exceções
Objeto AccountRecord
armazena registro sendo
lido a partir do arquivo
Verifica se registro é do
tipo que deve ser mostrado
na tela
Método que determina se o
registro é do tipo adequado
Faz loop até usuário inserir uma
opção válida
Recupera a solicitação inserida
Lê o arquivo e exibe
os registros
adequados
Atualizando arquivos de
acesso sequencial
Ø Dados em muitos arquivos sequenciais não podem
ser modificados sem o risco de destruir outros dados
no arquivo.
Ø Exemplo: modificando “Ramos” para “Ribeiro”
Ø Nome antigo não pode ser sobrescrito porque o novo
nome precisa de mais espaço
Ø Caracteres além do tamanho do primeiro registro anterior
sobrescreverão o próximo registro.
Ø Registros em arquivos de acesso sequencial
normalmente não são atualizados no lugar. Em vez
disso, o arquivo inteiro é regravado.
Serialização de objetos
Ø Em arquivos de texto as informações dos tipos de dados
dos registros são perdidas.
Ø Exemplo: Lendo o valor 3 ele pode ter vindo de um tipo int,
String ou double.
Ø No disco temos dados, mas não informações do tipo.
Ø Serialização de objetos à mecanismo do java
Ø Objetos serializado à objeto representado como sequencia
de bytes que inclui os dados do objeto, as informações de
tipo do objeto e os tipos dos dados armazenados no objeto.
Ø Desserialização à Quando o objeto é lido e é recriado na
memória a partir dos dados do arquivo.
Classes e interfaces utilizadas
Classes ObjectInputStream / ObjectOutputStream
• Implementam as interfaces ObjectInput e ObjectOutput
• Permitem que objetos inteiros sejam lidos ou gravados em um fluxo
(arquivo)
• Se inicializam os objetos ObjectInputStream e ObjectOutputStream
com objetos de fluxo que leem e gravam arquivos (classes
FileInputStream e FileOutputStream) à Empacotamento.
Lê o registro a partir do
arquivo
Mostra as informação do
registro
Classes java.io adicionais
Classes
Classes abstract que declaram os métodos para realizar entrada e saída
InputStream baseada em bytes.
OutputStream
Classes
PipedInputStream Estabelecem pipes entre dois threads em um programa.
PipedOutputStream
Pipes são canais de comunicação sincronizados entre threads.
Classes
FilterInputStream Fornecem funcionalidade adicional ao fluxo, como agregar bytes de dados a
FilterOutputStream unidades de tipo primitivo significativas.
Classe
Gera a saída de texto para um fluxo especificado.
PrintStream
Interfaces Para leitura e gravação de tipos primitivos em um arquivo.
DataInput
DataOutput DataInput é implementada pelas classes RandomAccessFilese DataInputStream;
Classes
BufferedReader e Permitem armazenamento em buffer de fluxos baseados em
BufferedWriter: caracteres.
Classes
CharArrayReader e Lêem e gravam fluxos de caracteres em arrays de caracteres.
CharArrayWriter:
Classe
LineNumberReader: Fluxo de caracteres armazenado em buffer que monitora o
número de leitura de linhas.
Classes PipedReader
e PipedWriter: Implementam fluxos de caracteres redirecionados que podem ser
utilizados para transferir informações entre threads.
Classes StringReader
e StringWriter: Lêem caracteres e gravam caracteres em Strings.
Abrindo arquivos com
JFileChooser
Ø Classe JFileChooser exibe caixa de diálogo que
permite ao usuário selecionar arquivos ou diretórios.
Exibe diálogo
Recupera arquivo ou
diretório selecionado
chama o
getFileOrDirectory
para recuperar
objeto File
Exibe informações
sobre o arquivo
Exercício
Ø Faça um programa que permita ao usuário inserir produtos
Ø Crie uma classe que guarde dados de produtos com as seguintes
informações
Ø Código
Ø Nome
Ø Preço
Ø Ano de fabricação
Ø Crie o arquivo “produtos.txt” com as informações inseridas
Ø Crie um arquivo para ler as informações de “produtos.txt”
Ø Faça a versão serializável
Ø Faça a versão com interface gráfica
Exercício
Ø Faça um programa que copie o conteúdo de um arquivo para outro.
Ø Uma loja possui 4 filiais, cada uma com um código de 1 a 4. Um arquivo contendo as
vendas diárias feitas nas quatro filiais é gerado a partir de uma planilha. Cada linha
do arquivo contém o número da filial e o valor de uma venda efetuada, separados por
vírgula. Ex.:
Ø 1,189.90
Ø 1,45.70
Ø 3,29.90
Ø 4,55.00
Ø No exemplo, a filial 1 fez duas vendas. A filial 3 fez uma venda e a 4 também uma.
Faça um programa que leia este arquivo e informe, ao final, o total e a média das
vendas de cada filial.
Ø Faça um programa que liste o conteúdo da raiz do seu disco (ou um diretório
qualquer) e informe, para cada item, se é um arquivo ou se é um diretório.
Ø Faça um programa que leia nomes, idades e alturas de várias pessoas e armazene em
um arquio. Em seguida, leia o arquivo e armazene em uma lista, e imprima o
conteúdo desta lista ordenado por nome, depois ordenado por idade e por fim
ordenado por altura.