Java9
Upcoming SlideShare
Loading in...5
×
 

Java9

on

  • 4,105 views

 

Statistics

Views

Total Views
4,105
Views on SlideShare
4,093
Embed Views
12

Actions

Likes
1
Downloads
151
Comments
0

2 Embeds 12

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

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

CC Attribution-NonCommercial LicenseCC Attribution-NonCommercial License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Java9 Java9 Presentation Transcript

  • Linguagens e Técnicas de Programação - JAVA José Marcos Barbosa da Silveira [email_address]
  • 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.
  • 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.
  • 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.
  • 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)
  • 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.
  • 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).
  • 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.
  • 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(), ...
  • 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()
  • 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), ...
  • 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");}
    • }}
  • 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");}
    • }}
  • 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");}
    • }
    • }
  • 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");}
    • }}
  • 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");}
    • }}
  • 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.
  • 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”);
  • 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");}
    • }
    • }
  • 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.
  • 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.