Java9

3,026 views

Published on

Published in: Technology, Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,026
On SlideShare
0
From Embeds
0
Number of Embeds
45
Actions
Shares
0
Downloads
152
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Java9

  1. 1. Linguagens e Técnicas de Programação - JAVA José Marcos Barbosa da Silveira [email_address]
  2. 2. Manipulação de Arquivos <ul><li>Objetivos deste capítulo </li></ul><ul><li>Demostrar os passos necessários para o armazenamento de arquivos no formato texto; </li></ul><ul><li>Demonstrar a importância do armazenamento e a recuperação de dados; </li></ul><ul><li>Enumerar os aspectos fundamentais para a leitura e gravação em arquivos; </li></ul><ul><li>Apresentar as classes e métodos utilizados para entrada e saída. </li></ul>
  3. 3. Manipulação de Arquivos <ul><li>A grande maioria das aplicações necessita armazenar dados para mainipulá-los posteriormente. Por esse motivo devem ser usados os arquivos de dados, isto é um conjunto de dados armazenados em memória secundária não volátil que pode ser recuperado pelo programa em qualquer instante. </li></ul><ul><li>Para manipular arquivos em JAVA, é necessária a utilização do pacote java.io. Os dados podem ser armazenados e recuperados pelo pacote java.io por intermédio de um sistema de comunicação denominado controle de fluxo ( Stream ), permitindo a manipulação em diferentes formatos de arquivos. </li></ul>
  4. 4. Manipulação de Arquivos <ul><li>Um stream pode ser caracterizado em várias dimensões </li></ul><ul><ul><li>Direção </li></ul></ul><ul><ul><ul><li>Streams de entrada </li></ul></ul></ul><ul><ul><ul><li>Em Java, possuem a palavra &quot;Input&quot; na classe (ex. InputStream) </li></ul></ul></ul><ul><ul><ul><li>O destino da informação é seu programa </li></ul></ul></ul><ul><ul><ul><li>Isto é, seu programa lê informação do stream </li></ul></ul></ul><ul><ul><ul><li>Streams de saída </li></ul></ul></ul><ul><ul><ul><li>Em Java, possuem a palavra &quot;Output&quot; na classe (ex. OutputStream) </li></ul></ul></ul><ul><ul><ul><li>A fonte da informação é seu programa </li></ul></ul></ul><ul><ul><ul><li>Isto é, seu programa grava informação no stream </li></ul></ul></ul><ul><ul><ul><li>Streams bidirecionais </li></ul></ul></ul><ul><ul><ul><li>Em Java, possuem a palavra &quot;RandomAccess&quot; na classe (ex. RandomAccessFile) </li></ul></ul></ul><ul><ul><ul><li>Seu programa lê e grava informação do/no stream. </li></ul></ul></ul>
  5. 5. Manipulação de Arquivos <ul><ul><li>Tipo de informação lida </li></ul></ul><ul><ul><ul><li>Streams de bytes (caracterizados pela palavra Stream) </li></ul></ul></ul><ul><ul><ul><li>Streams de caracteres Unicode (caracterizados pela palavra Reader ou Writer) </li></ul></ul></ul><ul><ul><li>Processamento intermediário realizado na informação </li></ul></ul><ul><ul><ul><li>Bufferização (palavra Buffered) </li></ul></ul></ul><ul><ul><ul><li>Na leitura, como o disco é lento, é melhor trazer muita informação de uma vez dentro de um lugar da memória (um array) que chamamos buffer </li></ul></ul></ul><ul><ul><ul><li>O acesso é feito diretamente à informação no buffer </li></ul></ul></ul><ul><ul><ul><li>Quando o buffer esvazia, é enchido novamente com uma única operação de leitura do disco </li></ul></ul></ul><ul><ul><ul><li>Idém para a saída </li></ul></ul></ul><ul><li>É por causa dessa grande variedade de opções que o sistema de entrada/saída do Java, baseado em streams, é meio complexo (mas não complicado) </li></ul>
  6. 6. Alguns Detalhes sobre o Conceito de Arquivo <ul><li>Arquivos são usados devido à sua persistência, isto é, o conteúdo não desaparece quando o programa termina. </li></ul><ul><li>Isso não é o caso para objetos manipulados pelo programa. </li></ul><ul><li>Outro lugar para guardar informação persistente é um Banco de Dados, é uma &quot;camada&quot; em cima de arquivos para dar um acesso mais rápido quando há uma quantidade muito grande de informação. </li></ul><ul><li>O acesso seqüencial proporcionado pelo arquivo seria muito lento o banco de dados fornece outros serviços, além de rapidez, tais como: </li></ul><ul><li>Robustez; </li></ul><ul><li>Agrupamento de operações (transações); </li></ul><ul><li>Controle de concorrência (quando vários usuários acessam os dados ao mesmo tempo); </li></ul><ul><li>etc. </li></ul>
  7. 7. Alguns Detalhes sobre o Conceito de Arquivo <ul><li>Ao usar &quot;new FileReader(nomeArquivo)&quot;, o sistema operacional &quot;abre&quot; o arquivo </li></ul><ul><li>A &quot;abertura&quot; do arquivo tem vários propósitos: </li></ul><ul><ul><li>Verificar se o arquivo existe; </li></ul></ul><ul><ul><li>Verificar se você tem permissão de usar o arquivo da maneira que está pedindo (ler ou gravar, por exemplo); </li></ul></ul><ul><ul><li>Preparar o sistema operacional para receber pedidos de acesso ao arquivo feitos pelo programa com a maior rapidez possível; </li></ul></ul><ul><ul><li>Para atender a isso, o sistema operacional guarda informação do arquivo na memória para ter acesso mais rápido; </li></ul></ul><ul><ul><li>No final, é necessário avisar o sistema operacional que o arquivo não será mais usado; </li></ul></ul><ul><ul><li>Isso é feito com a operação de fechamento de arquivo (close). </li></ul></ul>
  8. 8. Alguns Detalhes sobre o Conceito de Arquivo <ul><li>Arquivos são freqüentemente organizados por registro </li></ul><ul><li>Exemplo: se um arquivo contiver o cadastro de alunos, um registro conteria o cadastro de um único aluno; </li></ul><ul><li>O registro consiste de campos (nome, matrícula, data de mascimento, ...) </li></ul><ul><li>O registro pode ser de tamanho fixo (tamanho fixo para cada campo) </li></ul><ul><li>O registro pode ser de tamanho variável (usando um separador especial entre campos); </li></ul><ul><li>Às vezes, o arquivo pode ser organizado de outras formas e não conter apenas uma sequência de registros do mesmo tipo </li></ul><ul><li>Exemplos: arquivo HTML, arquivo XML, etc., etc. </li></ul>
  9. 9. Alguns Detalhes sobre o Conceito de Arquivo <ul><li>Alguns Métodos Disponíveis para Manipular Streams </li></ul><ul><li>As classes que definem streams em Java possuem vários métodos de acesso, veremos aqui alguns dos métodos mais importantes de algumas classes. </li></ul><ul><li>Veja a documentação da API Java para ver a lista completa de métodos. </li></ul><ul><li>InputStream </li></ul><ul><li>Todos os InputStreams podem: </li></ul><ul><ul><li>Ler um byte: read() </li></ul></ul><ul><ul><li>Ler vários bytes: read(byte[] b) </li></ul></ul><ul><ul><li>Observe que a leitura de um byte retorna int </li></ul></ul><ul><ul><li>Motivo: queremos retornar qualquer valor de byte e ainda ter o valor -1 para indicar o fim do stream </li></ul></ul><ul><ul><li>O ObjectInputStream ainda pode: </li></ul></ul><ul><ul><li>Ler um Objeto qualquer: readObject() </li></ul></ul><ul><ul><li>O DataInputStream ainda pode: </li></ul></ul><ul><ul><li>Ler dados de tipos básicos: readBoolean(), readDouble(), readInt(), ... </li></ul></ul>
  10. 10. Alguns Detalhes sobre o Conceito de Arquivo <ul><li>OutputStream </li></ul><ul><li>Todos os OutputStreams podem: </li></ul><ul><ul><li>Gravar um byte: write(int b) </li></ul></ul><ul><ul><li>Gravar vários bytes: write(byte[] b) </li></ul></ul><ul><ul><li>O ObjectOutputStream ainda pode: </li></ul></ul><ul><ul><li>Gravar um Objeto qualquer: writeObject(Object obj) </li></ul></ul><ul><ul><li>O DataInputStream ainda pode: </li></ul></ul><ul><ul><li>Gravar dados de tipos básicos: writeBoolean(), writeDouble(), writeInt(), ... </li></ul></ul><ul><li>FileReader </li></ul><ul><li>Todos os FileReaders podem: </li></ul><ul><ul><li>Ler um caractere: read() </li></ul></ul><ul><ul><li>Retorna -1 no fim de arquivo </li></ul></ul><ul><ul><li>O BufferedReader ainda pode: </li></ul></ul><ul><ul><li>Ler uma linha inteira: readLine() </li></ul></ul><ul><ul><li>O LineNumberReader ainda pode: </li></ul></ul><ul><ul><li>Retornar o número da linha: getLineNumber() </li></ul></ul>
  11. 11. Alguns Detalhes sobre o Conceito de Arquivo <ul><li>FileWriter </li></ul><ul><li>Todos os FileWriters podem: </li></ul><ul><ul><li>Gravar um caractere: write(int c) </li></ul></ul><ul><ul><li>O BufferedWriter ainda pode: </li></ul></ul><ul><ul><li>Gravar um caractere de nova-linha (separador de linhas): newLine() </li></ul></ul><ul><ul><li>O PrintWriter ainda pode: </li></ul></ul><ul><ul><li>Gravar dados de tipos básicos de forma formatada: print(int), print(double), ... </li></ul></ul>
  12. 12. Gravação de um arquivo texto usando FileOutputStream <ul><li>Este item apresenta de forma prática o armazenamento e recuperação de um arquivo texto. Existem diversas maneiras de realizar a manipulação de arquivos texto. A forma apresentada aqui utiliza a classe FileInputStream para a leitura do arquivo e a classe FileOutputStream para a gravação. </li></ul><ul><li>Exemplo: </li></ul><ul><li>import java.io.*; </li></ul><ul><li>class TesteFileOutputStream{ </li></ul><ul><li>public static void main(String args[]){ </li></ul><ul><li> String b=&quot;teste&quot;; </li></ul><ul><li> byte bt[]= b.getBytes(); </li></ul><ul><li> try{ </li></ul><ul><li> FileOutputStream out =new FileOutputStream(&quot;c:/temp/teste.txt&quot;); </li></ul><ul><li> out.write(bt); </li></ul><ul><li> out.close(); </li></ul><ul><li>} </li></ul><ul><li>catch(IOException e){System.out.println(&quot;Erro ao criar arquivo&quot;);} </li></ul><ul><li>}} </li></ul>
  13. 13. Leitura de um arquivo texto usando FileInputStream <ul><li>Exemplo: </li></ul><ul><li>import java.io.*; </li></ul><ul><li>class TesteFileInputStream{ </li></ul><ul><li>public static void main(String args[]){ </li></ul><ul><li> String b; </li></ul><ul><li> byte bt[]= new byte[100]; </li></ul><ul><li> try{ </li></ul><ul><li> FileInputStream in =new FileInputStream(&quot;c:/temp/teste.txt&quot;); </li></ul><ul><li> in.read(bt); </li></ul><ul><li> b=new String(bt); </li></ul><ul><li> System.out.println(b); </li></ul><ul><li> in.close(); </li></ul><ul><li>} </li></ul><ul><li>catch(IOException e){System.out.println(&quot;Erro ao abrir arquivo&quot;);} </li></ul><ul><li>}} </li></ul>
  14. 14. Gravação de um arquivo texto usando FileWriter <ul><li>Exemplo: </li></ul><ul><li>import java.io.*; </li></ul><ul><li>class TesteFileWriter{ </li></ul><ul><li>public static void main(String args[]){ </li></ul><ul><li> String b=&quot;teste&quot;; </li></ul><ul><li> try{ </li></ul><ul><li> FileWriter out =new FileWriter(&quot;c:/temp/teste.txt&quot;); </li></ul><ul><li> out.write(b); </li></ul><ul><li> out.close(); </li></ul><ul><li>} </li></ul><ul><li>catch(IOException e){System.out.println(&quot;Erro ao criar arquivo&quot;);} </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  15. 15. Leitura de um arquivo texto usando FileReader <ul><li>Exemplo: </li></ul><ul><li>import java.io.*; </li></ul><ul><li>class TesteFileReader{ </li></ul><ul><li>public static void main(String args[]){ </li></ul><ul><li> int b; </li></ul><ul><li> String s=&quot;&quot;; </li></ul><ul><li> try{ </li></ul><ul><li> FileReader in =new FileReader(&quot;c:/temp/teste.txt&quot;); </li></ul><ul><li> b=in.read(); </li></ul><ul><li> while(b!=-1){ </li></ul><ul><li> s=s+(char)b; </li></ul><ul><li> b=in.read(); </li></ul><ul><li> } </li></ul><ul><li> System.out.println(s); </li></ul><ul><li> in.close(); </li></ul><ul><li>} </li></ul><ul><li>catch(IOException e){System.out.println(&quot;Erro ao criar arquivo&quot;);} </li></ul><ul><li>}} </li></ul>
  16. 16. Gravação de um arquivo texto usando PrintWriter <ul><li>Exemplo: </li></ul><ul><li>import java.io.*; </li></ul><ul><li>class TestePrintWriter{ </li></ul><ul><li>public static void main(String args[]){ </li></ul><ul><li> String nome=&quot;José&quot;; </li></ul><ul><li> long matricula=12345; </li></ul><ul><li> float nota=7.5f; </li></ul><ul><li> try{ </li></ul><ul><li> PrintWriter out </li></ul><ul><li>= new PrintWriter(new BufferedWriter(new FileWriter(&quot;c:/temp/teste.txt&quot;))); </li></ul><ul><li>out.println(nome); </li></ul><ul><li>out.println(matricula); </li></ul><ul><li>out.println(nota); </li></ul><ul><li> out.close(); </li></ul><ul><li> } </li></ul><ul><li>catch(IOException e){System.out.println(&quot;Erro ao criar arquivo&quot;);} </li></ul><ul><li>}} </li></ul>
  17. 17. Trabalhando com acesso randômico a arquivos <ul><li>public RandomAccessFile extends Object </li></ul><ul><li> implements DataOuput, DataInput </li></ul><ul><ul><li>permite ler e gravar em arquivos de forma randômica. </li></ul></ul><ul><ul><li>permite posicionar em qualquer posição do arquivo e realizar a operação de leitura ou escrita. </li></ul></ul><ul><ul><li>prove segurança pelo fato de oferecer métodos que permitem diferentes modos de acesso ao arquivo: somente leitura, leitura-gravação. </li></ul></ul><ul><ul><li>suporta a noção de ponteiro para o arquivo. </li></ul></ul>
  18. 18. RandomAccessFile - construtores <ul><li>RandomAccessFile (File, String) </li></ul><ul><ul><li>cria um stream para acesso randômico a arquivos para leitura e gravação no FILE especificado. Segue exemplo: </li></ul></ul><ul><ul><li>File in = new File(“entrada.txt”); </li></ul></ul><ul><ul><li>RandonAccessFile f i = new RandonAccessFile(in,”r”); </li></ul></ul><ul><li>RandomAccessFile (String, String) </li></ul><ul><ul><li>cria uma stream para acesso randômico a arquivos para leitura e gravação com o nome do arquivo especifico. Segue exemplo: </li></ul></ul><ul><ul><li>RandomAccessFile fi = new RandomAcessFile </li></ul></ul><ul><ul><li>(“entrada.txt”,”r”); </li></ul></ul>
  19. 19. Leitura de um arquivo texto usando RandomAccessFile <ul><li>Exemplo: import java.io.*; </li></ul><ul><li>class TesteRAF{ </li></ul><ul><li>public static void main(String args[]){ </li></ul><ul><li>String text[]= new String[50]; </li></ul><ul><li>int i=0; </li></ul><ul><li>try{ </li></ul><ul><li>RandomAccessFile r= </li></ul><ul><li>new RandomAccessFile(&quot;c:/temp/teste.txt&quot;,&quot;r&quot;); </li></ul><ul><li>while((text[i]=r.readLine())!=null){ </li></ul><ul><li> System.out.println(text[i]); </li></ul><ul><li> i++; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>catch(IOException e){System.out.println(&quot;Erro ao abrir arquivo&quot;);} </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  20. 20. Exercícios <ul><li>1) Faça um programa (Paginador.java) para ler linhas em um arquivo e mostrar as linhas na tela MS-DOS de forma paginada. Isto é, a cada 20 linhas impressas dar uma pausa e esperar a intervenção do usuário; </li></ul><ul><li>2) Faça um programa (TrocaPalavra.java) que receba na linha de comando um nome de arquivo, palavra antiga e palavra nova (palavra é um conjunto de caracteres). O programa deverá procurar no arquivo pela palavra antiga e substituí-la pela nova. Considere que as palavras possuem o mesmo número de caracteres. </li></ul><ul><li>3) Crie um aplicativo que apresente a soma e a média dos números armazenados em um arquivo em disco. </li></ul>
  21. 21. Bibliografia <ul><ul><li>FURGERI, Sérgio. Java 2: Ensino didático: Desenvolvendo e Implementando Aplicações – </li></ul></ul><ul><ul><li>São Paulo: Érica, 372p. 2002. </li></ul></ul><ul><ul><li>TAMASSIA, R.; GOODRICH, M.T. Estrutura de Dados e Algoritmos em Java. Bookman, 2002. </li></ul></ul><ul><ul><li>DEITEL,H.M.; DEITEL, P.J. Java: Como Programar , Bookman, 2002. </li></ul></ul>

×