Java9
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
4,233
On Slideshare
4,221
From Embeds
12
Number of Embeds
2

Actions

Shares
Downloads
151
Comments
0
Likes
1

Embeds 12

http://www.slideshare.net 10
https://duckduckgo.com 2

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

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