Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Documentos relacionados
Laboratório de Programação

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Prof. A. G. Silva. 13 de novembro de Prof. A. G. Silva INE5603 Introdução à POO 13 de novembro de / 1

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Unidade VIII Persistência de Dados em Java

InputStream e OutputStream para ler/ escrever bytes e das classes abstractas Reader e Writer para ler /escrever caracteres (texto).

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Como pôde verificar, a criação de um objecto do tipo File não cria o ficheiro em disco.

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Reader e Writer para streams de caracteres (texto).

Arquivos continuação. Profa. Thienne Johnson EACH/USP

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Entrada e Saída Exercício. Linguagem Java. Adenilso da Silva Simão 01/09/05

Array de objectos Array de objectos Criação Exemplo:

Programação Orientada a Objetos

Entrada e Saída de dados por JOptionPane

Faculdade de Engenharia da Computação

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

Hierarquia de classes. Veja as diversas classes do pacote

Linguagem de Programação II Implementação

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

insfcanceof new public switch transient while byte continue extends for int null

double [] precoa = new double [1000]; // Preço com desconto para compras Avista

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Manipulação de arquivos. João Paulo Q. dos Santos

Programação de Computadores II TCC Profs.: Anselmo Montenegro (1) & Marcos Lage (2) (1) (2)

Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java

Orientação a Objetos e Java

Programação de Computadores II TCC /Turma A 1

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Prof. Rogério Albuquerque de Almeida. Programação Orientada a Objetos II JAVA Décima Segunda Aula

Laboratório de Programação

Prof. Rogério Rocha 1

PROGRAMAÇÃO JAVA. Parte 3

Computação II - Java - Prova 1 Prof. Adriano Joaquim de Oliveira Cruz /05/13. Questão: Total Pontos: Gráu:

ESQUEMA AULA PRÁTICA 1

Objetivos do Capítulo

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

ESQUEMA AULA PRÁTICA 1

Objetivos deste capítulo

Programação de Computadores II TCC /Turma A 1

Linguagem de programação Java

Aula 7 Modularização. Processamento da Informação. Universidade Federal do ABC

Atributos e Métodos Estáticos

Simulado de Linguagem de Programação Java

Um Modelo Semântico para a Linguagem Java Jorge Henrique Cabral Fernandes CIC-UnB Junho de Introdução

Módulo Lógica Programação com aplicações em Java. Projeto khouse Profissionalizante Profª Larissa Brandão

LÓGICA DE PROGRAMAÇÃO (JAVA) VARIÁVEIS. Professor Carlos Muniz

Sintaxe Básica de Java Parte 2

Ataque em Sistemas Distribuídos Site :

Usando o Eclipse - Fundamentos. Professor Vicente Paulo de Camargo

Linguagem de Programação II Implementação

RESPOSTA: import java.util.arraylist; import java.util.list; class CarrinhoDeCompras2 { List<Produto> produtos;

INF1001: Introdução à Ciência da Computação P2 25/05/08 Nome:

10 Arquivos e fluxos. Desenvolvimento OO com Java. Vítor E. Silva Souza

DIRETORIA ACADÊMICA DE GESTÃO E TECNOLOGIA DA INFORMAÇÃO DIATINF TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS TADS

Escreva em Java a classe NumeroComplexo que represente um número complexo. A classe deverá ter os seguintes construtores:

Apêndice A. Alguns construtores e métodos importantes e úteis da classe Vector são:

PHP: <?php echo("hello World");?> Printa Hello World na página do navegador, mais fácil do que no Java.

Algoritmos I Aula 14 Java: estruturas de seleção e repetição

Reader e Writer para streams de caracteres (texto).

Linguagem de Programação Visual

Aula 08 Estruturas de Condição. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Aula 3. Objetivos Sequências de escapes ; Um aplicativo que adiciona inteiro; Aritmética.

Sistema Futebol - Java

RESULUÇÃO DOS EXERCÍCIOS E INSTRUÇÕES DE DECISÃO (if{} e else{}) Profº André Aparecido da Silva Disponível em:

Tratamento de Exceções

Ambientação com a Sintaxe de Java: parte 1

Programação Estruturada e Orientada a Objetos

Estrutura de Dados Funções e Procedimentos

Fundamentos de Programação 1

20/10/15. Arquivos e fluxos. Arquivos. Plataformas e sistemas de arquivo. A classe java.io.file. Modo de operação. Fluxos, leitores e escritores

Exercícios sobre repetição. 1. Escreva um método que lê via teclado 8 números e retorna a quantidade de negativos.

Programação de Computadores II

IO.println(a+" * "+b+" = "+produto); } }

Exceções. Profa. Patrícia A. Jaques Slides alterados por Leandro Tonietto Mar-12. quarta-feira, 21 de março de 12

Algoritmos II prof. Daniel Oliveira

Programação Java. Entrada & Saída

Genéricos. Profa. Thienne Johnson EACH/USP

Laboratório de Programação

Universidade Estadual de Santa Cruz

PROGRAMAÇÃO JAVA. Parte 2

Aula 03 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

AULA 11 PROGRAMAÇÃO ORIENTADA A OBJETOS (INTRODUÇÃO) Disciplina: Programação Orientada a Objetos Professora: Alba Lopes

Palavras Reservadas da Linguagem Java

1. Estude e implemente a classe Exemplo1 apresentada abaixo:

SCC 202 Algoritmos e Estruturas de Dados I. Pilhas (Stacks) (implementação dinâmica)

Linguagem Java - Introdução

21/05/2013. Informações Complexas. Arquivos de Texto e Arquivos Binários. Hierarquia de Dados. Armazena Informação. Classificação de Arquivos

Estruturas de Controle em c#

Tipos de dados e comandos POO

Orientação a Objetos. Programação em C++

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis

Lição 4 Fundamentos da programação

Transcrição:

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação LP: Laboratório de Programação Apontamento 16 Prof. ISVega Maio de 2004 Arquivos Binários CONTEÚDO 16.1 Processamento de Arquivos de Dados....... 1 16.2Processamento de Bytestreams.......... 2 16.2.1Escrita COM Filtros............. 2 16.3Aplicação: Controle de Estoque.......... 6 16.3.1Criação do Arquivo de Estoque....... 6 16.3.2Processamento do Arquivo de Estoque.. 8 Exercícios.......................... 12 16.4Anexo: Listagem do Protótipo........... 14 16.4.1Pacote Principal............... 14 16.4.2Pacote dados................. 14 16.4.3Pacote estoque2............... 15 Java. Objetivos Mostrar como ler e escrever arquivos binários em 16.1 Processamento de Arquivos de Dados Informações são armazenadas em um arquivo ou na forma de bytes (dados) ou na forma de texto (linhas de caracteres). Assim, as seqüências de bytes podem ser 1

vistas como texto ou como dados (estruturados). No primeiro caso, deve-se utilizar instâncias do tipo Reader e Writer. No segundo caso, deve-se usar instâncias do tipo FilterInputStream e FilterOutputStream. 16.2 Processamento de Bytestreams Processamento de Dados COM Filtros O processamento de arquivos de dados (binários) com filtros (precisa indicar um FileInputStream ou FileOutputStream como origem do texto) é feito por instâncias da classe DataInputStream e DataOutputStream. 16.2.1 Escrita COM Filtros A escrita de dados sem filtros é feita por instâncias da classe DataOutputStream, segundo o padrão: lab/padrao/escritadadosfiltro.java Escrita dados: dependências public class EscritaDadosFiltro { public escrever() { Escrita dados: criar arquivo de dados Escrita dados: escrever dados Escrita dados: fechar arquivo de dados Dependências Externas O método de escrita em arquivos de dados depende das seguintes classes da biblioteca Java: Escrita dados: dependências import java.io.fileoutputstream; import java.io.dataoutputstream; import java.io.filenotfoundexception; import java.io.ioexception; Método de Escrita O primeiro passo envolve a criação do arquivo e do filtro de escrita de dados: Copyright c 1998-2004, Dr. Italo S. Vega 16-2

Escrita dados: criar arquivo de dados // ABERTURA DataOutputStream filtro = null; FileOutputStream arquivo = new FileOutputStream( "dados.dat" ); filtro = new DataOutputStream( arquivo ); catch( FileNotFoundException e ) { System.out.println( "Falha na criação do arquivo" ); Em seguida, escrevem-se os dados em si: Escrita dados: escrever dados // ESCRITA filtro.writechar( a ); System.out.println( "Falha na escrita" ); Por último, fecha-se o arquivo de dados: Escrita dados: fechar arquivo de dados // FECHAMENTO filtro.close(); System.out.println( "Falha ao fechar" ); Serviços de Escrita Os serviços oferecidos pelo filtro de escrita são: Copyright c 1998-2004, Dr. Italo S. Vega 16-3

flush close size write (byte) writeboolean writebyte writebytes writechar writechars (unicode strings) writedouble writefloat writeint writelong writeshort writeutf Leitura COM Filtros A leitura de dados com filtros é feita por instâncias da classe DataInputStream. lab/padrao/leituradadosfiltro.java Leitura dados: dependências public class LeituraDadosFiltro { public ler() { Leitura dados: abrir e criar o filtro Leitura dados: ler os dados Leitura dados: fechar o arquivo Dependências Externas O método de escrita em arquivos de dados depende das seguintes classes da biblioteca Java: Leitura dados: dependências import java.io.fileinputstream; import java.io.datainputstream; import java.io.filenotfoundexception; import java.io.eofexception; import java.io.ioexception; Método de Leitura O primeiro passo envolve a abertura do arquivo a ser lido e do filtro de leitura de dados: Copyright c 1998-2004, Dr. Italo S. Vega 16-4

Leitura dados: abrir e criar o filtro // ABERTURA DataInputStream filtro = null; FileInputStream arquivo = new FileInputStream( "dados.dat" ); filtro = new DataInputStream( arquivo ); catch( FileNotFoundException e ) { System.out.println( "Arquivo inexistente" ); Em seguida, lêem-se os dados em si: Leitura dados: ler os dados // LEITURA System.out.println( filtro.readchar() ); catch( EOFException e ) { System.out.println( "Fim do arquivo" ); System.out.println( "Falha na leitura" ); Por último, fecha-se o arquivo de dados: Leitura dados: fechar o arquivo // FECHAMENTO filtro.close(); System.out.println( "Falha ao fechar"); Serviços de Leitura Os serviços oferecidos pelo filtro de leitura são: Copyright c 1998-2004, Dr. Italo S. Vega 16-5

close read (byte) readboolean readbyte readchar readdouble readfloat readfully readint readlong readshort readunsignedbyte readunsignedshort readutf (strings) skipbytes 16.3 Aplicação: Controle de Estoque Esta seção cria um arquivo contendo produtos, quantidades e preços unitários, o qual é posteriormente processado, produzindo um relatório de estoque. O arquivo, nesta aplicação, é do tipo arquivo de dados. 16.3.1 Criação do Arquivo de Estoque A criação do arquivo de estoque, denominado estoque.dat, segue o padrão anteriormente descrito para o caso de escrita arquivos de dados. lab/estoque2/estoquista.java pacotes importados na criação do estoque public class Estoquista { DataOutputStream filtro = null; public void cadastrar() { abrir o arquivo de dados e criar o filtro de escrita do estoque obter as quantidades de produtos e escrever no arquivo esvaziar o filtro e fechar o arquivo de dados System.exit(0); Dependências Externas As seguintes classes são necessárias para criar o arquivo de estoque de produtos: Copyright c 1998-2004, Dr. Italo S. Vega 16-6

pacotes importados na criação do estoque import java.io.fileoutputstream; import java.io.dataoutputstream; import java.io.ioexception; Método de Criação do Estoque A abertura e criação do filtro de escrita obedece ao padrão: abrir o arquivo de dados e criar o filtro de escrita do estoque // ABRIR ARQUIVO DE DADOS E CRIAR FILTRO FileOutputStream arqdados = new FileOutputStream( "estoque.dat" ); filtro = new DataOutputStream( arqdados ); A parte principal da criação do arquivo de estoque deve percorrer cada produto e solicitar que o estoquista informe a quantidade atual existente. Inicialmente os produtos e preços unitários são definidos. Em seguida, cria-se um leitor optico para a leitura das quantidades. Uma repetição controlada por contador percorre cada produto e solicita a quantidade existente. Este valor é convertido para int e posteriormente escrito no arquivo de dados. Um aspecto importante nesta parte do método de escrita é que a quantidade de caracteres que compõe o nome do produto precede este nome no arquivo: obter as quantidades de produtos e escrever no arquivo // ESCREVER NO ARQUIVO DE DADOS String[] produtos = { "Lapis", "Borracha", "Caderno", "Caneta" ; double[] precos = { 0.70, 0.35, 5.00, 1.20 ; LeitorOptico optico = new LeitorOptico(); for( int i = 0; i < produtos.length; i++ ) { int qtde = optico.obterint( "Quantidade de " + produtos[i] + "?"); filtro.writeint( produtos[i].length() ); // <- tamanho do string filtro.writechars( produtos[i] ); filtro.writeint( qtde ); filtro.writedouble( precos[i] ); optico = null; Copyright c 1998-2004, Dr. Italo S. Vega 16-7

A parte final esvazia o filtro e fecha o arquivo de dados contendo as informações sobre o estoque atual: esvaziar o filtro e fechar o arquivo de dados // ESVAZIAR FILTRO E FECHAR O ARQUIVO DE DADOS filtro.flush(); filtro.close(); O contexto envolvendo o leitor óptico apenas solicita a quantidade de produto disponível no estoque, simulando o dispositivo real de leitura utilizado pelo estoquista: lab/estoque2/leitoroptico.java import javax.swing.joptionpane; public class LeitorOptico { public int obterint( String pergunta ) { String linha = JOptionPane.showInputDialog( pergunta ); int n = 0; n = Integer.parseInt( linha ); catch( NumberFormatException e ) { System.out.println( "Quantidade desconhecida" ); return n; 16.3.2 Processamento do Arquivo de Estoque O processamento do arquivo de estoque deve ler os valores informados e gerar um relatório da situação atual dos produtos. lab/estoque2/estoque.java pacotes importados no processamento do estoque public class Estoque { DataInputStream filtro = null; public void recuperaritens() { abrir o arquivo de dados e criar o filtro de leitura do estoque carregar as informações sobre cada produto e gerar o relatório fechar o arquivo de estoque mostrar o relatório do estoque Copyright c 1998-2004, Dr. Italo S. Vega 16-8

São os seguintes os arquivos importados para o processamento do estoque: pacotes importados no processamento do estoque import java.io.fileinputstream; import java.io.datainputstream; import java.io.ioexception; import java.io.filenotfoundexception; import java.io.eofexception; A abertura do arquivo de estoque para leitura, segue o padrão normal visto anteriormente: abrir o arquivo de dados e criar o filtro de leitura do estoque // ABRIR ARQUIVO DE DADOS E CRIAR FILTRO FileInputStream arqdados = new FileInputStream( "estoque.dat" ); filtro = new DataInputStream( arqdados ); catch( FileNotFoundException e ) { A carga de informações do arquivo faz uso do filtro de leitura de dados. O nome do produto, sua quantidade e o preço unitário são carregados diretamente do arquivo. A partir deles, um novo contexto da classe Item é construído, sendo de imediato inserido na lista produtos, representando o estoque atual: carregar as informações sobre cada produto e gerar o relatório // LER DO ARQUIVO DE DADOS Item[] produtos = new Item[ 100 ]; int n = 0; carregar todos os itens do arquivo A carga de todos os itens do arquivos é feita com uma estrutura de controle de repetição com parada por sentinela: Copyright c 1998-2004, Dr. Italo S. Vega 16-9

carregar todos os itens do arquivo boolean acabou = false; while(! acabou ) { carregar um item do arquivo de estoque n++; catch( NumberFormatException e ) { System.out.println( "ERRO no arquivo de entrada: dados ignorados" ); catch( EOFException e ) { acabou = true; A carga individual de um item recupera cada uma das suas partes: carregar um item do arquivo de estoque String produto = ""; int k = filtro.readint(); // <- tamanho do nome do produto for( int i = 0; i < k; i++ ) { produto += filtro.readchar(); int qtde = filtro.readint(); double preco = filtro.readdouble(); produtos[n] = new Item( produto, qtde, preco ); Após a leitura de todos os dados do arquivo de estoque, ele é fechado: fechar o arquivo de estoque // FECHAR O ARQUIVO DE DADOS filtro.close(); Por último, a lista de produtos é apresentada, contabilizando-se o valor total de cada produto disponível: mostrar o relatório do estoque public void gerarrelatorio() { for( int i = 0; i < produtos.length; i++ ) { System.out.println( produtos[i] ); Copyright c 1998-2004, Dr. Italo S. Vega 16-10

A classe Item modela a estrutura de informações de um item estocado. A estrutura é composta pelo nome do produto, sua quantidade em estoque e o seu preço unitário. Adicionalmente, uma propriedade de formatação é utilizada no momento da conversão feita pelo serviço tostring(): lab/estoque2/item.java import java.text.decimalformat; public class Item { private String _produto; private int _quantidade; private double _preco; private DecimalFormat _formato; public Item( String produto, int quantidade, double preco ) { _produto = produto; _quantidade = quantidade; _preco = preco; _formato = new DecimalFormat( "0.##" ); public String tostring() { return _produto + ":" + _quantidade + " a " + _preco + " = " + _formato.format( (_quantidade * _preco) ); Copyright c 1998-2004, Dr. Italo S. Vega 16-11

EXERCÍCIOS 16.1 PROCESSO DE ESCRITA DE DADOS Implemente e execute o programa de escrita em arquivos de dados com filtro (EscritaDadosFiltro.java na seção de listagens). Tarefa 16.1.1 Tarefa 16.1.2 Crie o projeto ex16.1. Implemente de acordo com o texto. 16.2 PROCESSO DE LEITURA DE DADOS Implemente e execute o programa de escrita em arquivos de dados com filtro (LeituraDadosFiltro.java na seção de listagens). Tarefa 16.2.1 Tarefa 16.2.2 Crie o projeto ex16.2. Implemente de acordo com o texto. 16.3 CONTROLE DE ESTOQUE Sobre o sistema de controle de estoque: Tarefa 16.3.1 Tarefa 16.3.2 Tarefa 16.3.3 Tarefa 16.3.4 Crie o projeto ex16.3. Implemente o programa do sistema de controle de estoque. Crie os objetos aldo:estoquista e bazar:estoque. Qual o efeito do processamento da mensagem aldo.cadastrar()? Tarefa 16.3.5 Qual o efeito do processamento das mensagens bazar.recuperaritens() seguida de bazar.gerarrelatorio()? Tarefa 16.3.6 Altere o arquivo Estoque.java de modo a ser apresentado o valor total estocado (somatória dos valores dos produtos estocados). OBS: procure utilizar um novo método totalizar(produtos):void que recebe o array produtos por referência e retorna o cálculo solicitado. 16.4 CÁLCULO DE MÉDIA Crie uma aplicação que calcula o mostra as notas e médias finais de uma turma de alunos. Tarefa 16.4.1 Crie o projeto ex16.4. Tarefa 16.4.2 Crie a classe Aluno.java descrevendo um aluno com as seguintes informações: primeiro nome, número de inscrição, notas das provas P1, P2 e PS. Por exemplo: Carlos 112233 5.5 7.8 - Andrea 333222 4.6 2.3 8.8 Zizi 545454 3.8 7.7 - (Estas informações devem estar armazenadas no arquivo de dados alunos.txt) Copyright c 1998-2004, Dr. Italo S. Vega 16-12

Tarefa 16.4.3 Crie a classe Turma.java, que lê o arquivo alunos.txt e mostra todas as suas linhas na tela. Tarefa 16.4.4 Acrescente um método na classe Turma.java, de modo que ele armazene o conteúdo do arquivo alunos.txt em um arquivo de dados denominado alunos.dat. Quais os tamanhos destes arquivos? Tarefa 16.4.5 Acrescente a classe Disciplina.java, de forma que seja carregado o arquivo de dados alunos.dat e sejam apresentadas todas as informações sobre um aluno, inclusive a média final de cada um deles. A média final é calculada da seguinte forma: caso o aluno não tenha feito PS. mf = P1 + 2 P2 2 Se o aluno fez PS, esta nota deverá substituir a menor das notas P1 ou P2: se P1 < P2; ou se P2 < P1. mf = mf = PS + 2 P2 2 P1 + 2 PS 2 Copyright c 1998-2004, Dr. Italo S. Vega 16-13

16.4 Anexo: Listagem do Protótipo 16.4.1 Pacote Principal 16.4.2 Pacote dados Classe EscritaDadosFiltro.java import java.io.fileoutputstream; import java.io.dataoutputstream; import java.io.filenotfoundexception; import java.io.ioexception; public class EscritaDadosFiltro { public static void main( String[] args ) { // ABERTURA DataOutputStream filtro = null; FileOutputStream arquivo = new FileOutputStream( "dados.dat" ); filtro = new DataOutputStream( arquivo ); catch( FileNotFoundException e ) { System.out.println( "Inexistente" ); // ESCRITA filtro.writechar( a ); System.out.println( "Falha na escrita" ); // FECHAMENTO filtro.close(); System.out.println( "Falha ao fechar" ); Classe LeituraDadosFiltro.java import java.io.fileinputstream; import java.io.datainputstream; import java.io.filenotfoundexception; import java.io.eofexception; import java.io.ioexception; public class LeituraDadosFiltro { public static void main( String[] args ) { // ABERTURA DataInputStream filtro = null; FileInputStream arquivo = new FileInputStream( "dados.dat" ); filtro = new DataInputStream( arquivo ); catch( FileNotFoundException e ) { System.out.println( "Inexistente" ); // LEITURA System.out.println( filtro.readchar() ); catch( EOFException e ) { System.out.println( "Fim do arquivo" ); System.out.println( "Falha na leitura" ); Copyright c 1998-2004, Dr. Italo S. Vega 16-14

// FECHAMENTO filtro.close(); System.out.println( "Falha ao fechar"); 16.4.3 Pacote estoque2 Classe Estoque.java import java.io.fileinputstream; import java.io.datainputstream; import java.io.ioexception; import java.io.filenotfoundexception; import java.io.eofexception; public class Estoque { DataInputStream filtro = null; public void recuperaritens() { // ABRIR ARQUIVO DE DADOS E CRIAR FILTRO FileInputStream arqdados = new FileInputStream( "estoque.dat" ); filtro = new DataInputStream( arqdados ); catch( FileNotFoundException e ) { // LER DO ARQUIVO DE DADOS Item[] produtos = new Item[ 100 ]; int n = 0; boolean acabou = false; while(! acabou ) { String produto = ""; int k = filtro.readint(); // <-- tamanho do nome do produto for( int i = 0; i < k; i++ ) { produto += filtro.readchar(); int qtde = filtro.readint(); double preco = filtro.readdouble(); produtos[n] = new Item( produto, qtde, preco ); n++; catch( NumberFormatException e ) { System.out.println( "ERRO no arquivo de entrada: dados ignorados" ); catch( EOFException e ) { acabou = true; // FECHAR O ARQUIVO DE DADOS filtro.close(); Copyright c 1998-2004, Dr. Italo S. Vega 16-15

public void gerarrelatorio() { for( int i = 0; i < produtos.length; i++ ) { System.out.println( produtos[i] ); Classe Estoquista.java import java.io.fileoutputstream; import java.io.dataoutputstream; import java.io.ioexception; public class Estoquista { DataOutputStream filtro = null; public void cadastrar() { // ABRIR ARQUIVO DE DADOS E CRIAR FILTRO FileOutputStream arqdados = new FileOutputStream( "estoque.dat" ); filtro = new DataOutputStream( arqdados ); // ESCREVER NO ARQUIVO DE DADOS String[] produtos = { "Lapis", "Borracha", "Caderno", "Caneta" ; double[] precos = { 0.70, 0.35, 5.00, 1.20 ; LeitorOptico optico = new LeitorOptico(); for( int i = 0; i < produtos.length; i++ ) { int qtde = optico.obterint( "Quantidade de " + produtos[i] + "?"); filtro.writeint( produtos[i].length() ); // <-- tamanho do string filtro.writechars( produtos[i] ); filtro.writeint( qtde ); filtro.writedouble( precos[i] ); optico = null; // ESVAZIAR FILTRO E FECHAR O ARQUIVO DE DADOS filtro.flush(); filtro.close(); System.exit(0); Classe Item.java import java.text.decimalformat; public class Item { private String _produto; private int _quantidade; private double _preco; private DecimalFormat _formato; public Item( String produto, int quantidade, double preco ) { _produto = produto; _quantidade = quantidade; _preco = preco; _formato = new DecimalFormat( "0.##" ); Copyright c 1998-2004, Dr. Italo S. Vega 16-16

public String tostring() { return _produto + ":" + _quantidade + " a " + _preco + " = " + _formato.format( (_quantidade * _preco) ); @%%% FIGURA --- %\figuradirpp[0.6]{\rota/\diretorio/images %{\dirfig-f-12 %{Esquema de um tanque de água. %%% --- FIGURA %\begin{isvsslide %\isvexercitar{5 %%\isvdiscutir{1 %\end{isvsslide Classe LeitorOptico.java import javax.swing.joptionpane; public class LeitorOptico { public int obterint( String pergunta ) { String linha = JOptionPane.showInputDialog( pergunta ); int n = 0; n = Integer.parseInt( linha ); catch( NumberFormatException e ) { System.out.println( "Quantidade desconhecida" ); return n; Copyright c 1998-2004, Dr. Italo S. Vega 16-17