SlideShare uma empresa Scribd logo
Entrada/Saída
O que é um Canal
   Em JAVA, todas os aspectos que se relacionam com as diferentes formas de se
    realizar a leitura e a escrita de dados a partir de uma fonte e para um destino,
    são reunidas, e abstraídas, no conceito de canal.
   Um Canal é uma abstracção que pode representar quer uma fonte genérica de
    entrada de dados ou um destino genérico para escrita de dados de acesso
    sequencial e independente de dispositivos físicos concretos, formatos ou até de
    mecanismos de optimização de leitura e escrita.


   Em JAVA, existem duas grandes classes de canais, designadamente:
     Canais de caracteres (canais de texto)
     Canais de bytes (canais binárias)




                                                               2
Classes Base
   Todos as classes , que implementam formas particulares de Leitura e Escrita
    em canais, são derivadas de quatro classes abstractas, são elas:

   Para os canais de bytes: InputStream e OutputStream
   Para os canais de caracteres: Reader e Writer (associados aos ficheiros)


   Estas classes sendo abstractas definem o conjunto de métodos que uma
    qualquer implementação de tais canais deverá concretizar.


   JAVA oferece serviços básicos de Entrada e Saída através de dois canais
    associados respectivamente às operações de bytes associada a leitura do
    teclado ou a e escrita no monitor:
       System.in: Leitura no teclado
       System.out: Escrita no monitor

                                                              3
Canal de leitura: System.in
   System.in: É o canal de leitura standard
       Por omissão lê o teclado

   Podemos usar System.in de várias maneiras
       Directamente (acesso básico)
       Em conjunto com outros canais (acesso combinado)




                                                4
Wrappers & Buffers
                     O package java.io está inteligentemente desenhado.
 InputStreamReader   Algumas das classes funcionam como classes embrulho
                     (wrapper classes) e destinam-se a acrescentar
     System.in       funcionalidade aos canais existentes.


                     Por Exemplo:


                     •InputStreamReader: Permite ler um caracter do teclado
                     sem ser necessário converte-lo manualmente.
 InputStreamReader
                     (read())
    System.in        •BufferedReader: Permite ler uma cadeia de caracteres
                     do teclado sem ser necessário converte-lo manualmente
  BufferedReader     (readLine()).



                                                    5
Ler do teclado (Java 1.4)

try {
  BufferedReader r = new BufferedReader(
                   new InputStreamReader(System.in));

 String s = r.readLine() ;
 int i = (new Integer(s)).intValue() ;

 System.out.println(i) ;
}
catch (IOException e) { }




                                            6
Canais de Bytes
                             ByteArrayInputStream
                                                        DataInputStream                   DataInput
                             FileInputStream
                                                         BufferedInputStream
                              FilterInputStream
                                                         LineNumberInputStream
          InputStream        SequenceInputStream
                                                         PushBackInputStream
                              PipedInputStream

                             ObjectInputStream                     ObjectInput

Object                        StringBufferInputStream


                              ByteArrayOutputStream

                              FileOutputStream           BufferedOutputStream

         OutputStream         FilterOutputStream        DataOutputStream         DataOutput

                              PipedOutputStream          PrintStream

                             ObjectOutputStream              ObjectOutput



          RandomAccessFile




                                                                          7
Canais de Caracteres
                            CharArrayReader

                           InputStreamReader    FileReader

                            FilterReader        PushBackReader

           Reader           StringReader

                            PipedReader

                           BufferedReader       LineNumberReader

Object                      BufferedWriter

                           CharArrayWriter

                           OutputStreamWriter    FileWriter

           Writer           FilterWriter

                            PipedWriter

                            PrintWriter

                            StringWriter


         StreamTokenizer




                                                              8
Classe Scanner (JAVA 5.0)

   A classe Scanner, introduzida com a versão J2SE 5.0, é uma
    classe nova que permite converter o texto para tipos primitivos.
   java.util.Scanner

   O texto pode ser obtido das mais diversas fontes tais como
    objectos do tipo:
     Strings

     InputStream

     Ficheiros



   A classe Scanner permite separar o texto em tokens, que são
    sequências de caracteres separados por delimitadores.

   Por defeito, os delimitadores são os espaços em branco, tabs e
    mudanças de linha.

                                                     9
Leitura do Teclado
   Para ler de forma confortável texto do canal de entrada padrão, é preciso
    criar primeiro um Scanner sobre canal System.in que esta associado ao
    teclado
        Scanner sc = new Scanner(System.in);

   Para cada um dos tipos primitivos há um método correspondente com a
    assinatura nextXxx() que retorne um valor desse tipo.

   Se a string não puder ser interpretada como sendo deste tipo, é lançado
    uma excepção do tipo InputMismatchException.

   Exemplos de algumas leituras de tokens:
     String aToken = sc.next() ; //Lê um token

     int num1 = sc.nextInt() ; //Lê um token inteiro
     double num2 = sc.nextDouble() ; //Lê um token              real
     String linha = sc.nextLine() ; //Lê uma linha




                                                            10
Exemplo: Ler do teclado (Java 5.0)
import java.io.*;
import java.util.*;

class ExScanner{
public static void main(String[] args) {
{
  Scanner scanTeclado = new Scanner(System.in);

    System.out.println ("Introduza um inteiro");

 try
  {
  int num = scanTeclado.nextInt();
  System.out.println ("Numero introduzido:" + num);
  }

 catch (InputMismatchException e)
  {
    System.out.println ("Erro na leitura do valor:" + e );
  }
  }
}


                                                             11
Exemplo: Ler do teclado (Java 5.0)
import java.io.*;
import java.util.*;

class ExScanner{
public static void main(String[] args) {
{
  String str = "Vamos experimentar o scanner";

    Scanner scanStr = new Scanner(str);

    while (scanStr.hasNext())
    {
    System.out.println ("Token:" + scanStr.next());
      }
    }
 }
}




                                                      12
Exemplo: Ler do teclado (Java 5.0)
                                    Ler int (e.g. 3501):   Introduziu 123
import java.io.*;
import java.util.*;
                                    Ler float (e.g.   2,43):    Introduziu 2.34
public class ScanConsoleApp{
  public static void main (String arg[]) {
         // Cria um scanner para ler do teclado
         Scanner scanner = new Scanner (System.in);
         try {
          System.out.printf (“Ler int (e.g. %4d): ",3501);
          int int_val = scanner.nextInt ();
          System.out.println (" Introduziu " + int_val +"n");

           System.out.printf (“Ler float (e.g. %5.2f): ", 2.43);
           float float_val = scanner.nextFloat ();
           System.out.println (" Introduziu " + float_val +"n");
         }
         catch (InputMismatchException e) {
           System.out.println (“Erro na leitura do valor:" + e );
         }
     }
}

                                                           13
Ficheiros
       Um ficheiro é uma entidade de armazenamento de informação permanente.

       A manipulação de ficheiros é feita pela utilização de canais que derivam das
        classes: InputStream; Reader; OutputStream; Writer.

       Os ficheiros, de acordo com o tipo de informação que podem armazenar,
        podem ser classificada em:

Ficheiros de Texto (Orientado ao caracter)
        Derivam das classes : Reader e Writer.
        Fácil de ser lido por humanos com ferramentas simples (type, more, edit, ...).
        Linhas com comprimento variável.
        Cada linha termina com uma marca.
        Exemplo: ficheiro com código-fonte em Java.

Ficheiro de Dados (Orientado ao byte)
        Derivam das classes : InputStream e OutputStream.
        Apropriado para o processamento por ferramentas automáticas.
        Armazenamento de tipos primitivos, serialização de objectos, etc.
        Armazenamento independente da plataforma.


                                                                                    14
A Classe File

       A classe File representa os ficheiros e directorias de um sistemas de
        ficheiros.
       Esta classe define métodos para a realização das operações sobre ficheiros
        e directorias:
           listagem de directorias

           apagar um ficheiro

           determinar atributos de um ficheiro, alterar o seu nome, etc.

   Definição:

           File entFich = new File(cadeia de caracteres);



                                                                        15
Os métodos da Classe File
CONSTRUTORES
   File(String caminho)                   construtor de directórios/ficheiros
   File(String caminho,String nome)       construtor com nome separado do caminho
   File(String directorio, String nome)   construtor com directório e nome do ficheiro


MÉTODOS
   boolean canRead()                      ficheiro/directório pode ser lido
   boolean canWrite()                     pode-se gravar no ficheiro/directório
   boolean delete()                       apaga ficheiro/directório
   boolean exists()                       verifica se ficheiro/directório existem
   boolean isAbsolute()                   verifica se caminho é absoluto
   boolean isDirectory()                  verifica se objecto é directório
   boolean isFile()                       verifica se objecto é ficheiro
   boolean mKdir()                        cria directório do objecto
   boolean mKdirs()                       cria directórios do caminho
   boolean renameTo(String novo)          muda nome do ficheiro/directório para novo

                                                                       16
Exemplo: Classe File
import java.io.*;
class Exemplo
{
  public static void main(String[] args) throws IOException
  {
    File meuFicheiro = new File(”dados.dat”);

        if (meuFicheiro.exists())

          System.out.println(“dados.dat existe");

        else

          System.out.println(" dados.dat     não existe");

    }
}
                             Testa a existência do ficheiro “dados.dat”


                                                      17
Escrita
             Ficheiro de Texto
   Passos necessários para criar um ficheiro de Texto

   Criar um objecto do tipo File. Permite manipular diversos atributos de
    um ficheiro.

   Criar um canal FileWriter ligado ao objecto File. Permite associar um
    ficheiro de texto a um canal de escrita.

   Criar um canal tampão BufferedWriter ligado ao objecto FileWriter.
    Maior eficiência na escrita de um ficheiro.

   Criar um canal PrintWriter ligado ao objecto BufferedWriter.
    Permite a utilização dos métodos print e println.




                                                        18
Escrita com PrintWriter
import java.io.*;
public class PrintWriterFileApp{
  public static void main (String arg[]) {

        File file = null;
        file = new File ("textOutput.txt");
        try {
          FileWriter file_writer = new FileWriter (file);
          BufferedWriter buf_writer = new BufferedWriter (file_writer);
          PrintWriter print_writer = new PrintWriter (buf_writer);

          print_writer.println ("Saida com PrintWriter.");
          print_writer.println ("tipos primitivos convertidos em strings:");

          boolean a_boolean = false;
          int an_int = 1234567;

          print_writer.println (a_boolean);
          print_writer.println (an_int);
          }
        catch (IOException ioe){ System.out.println("IO Exception"); }
    }
}


                                                          19
Escrita num ficheiro de Texto (formatado)
import java.io.*;
public class PrintWriterFileApp{
  public static void main (String arg[]) {

       File file = null;
       file = new File ("textOutput.txt");
       Formatter formatter;
       try {
         formatter = new Formatter (file);

         formatter.format ("Saida com PrintWriter. %n");
         formatter.format ("tipos primitivos convertidos em strings: %n");

         boolean a_boolean = false;
         int an_int = 1234567;
        double a_double = -4.297e-15;

        formatter.format ("boolean = %9b %n", a_boolean);
        formatter.format ("int     = %9d %n", an_int);
         formatter.format ("double = %9.2e %n", a_double);
         formatter.flush ();
         formatter.close ();
       }
       catch (IOException ioe){ System.out.println("IO Exception"); }
  }}
                                                         20
Escrita num ficheiro de Texto (formatado)
 formatter.format ("Saida com PrintWriter. %n");
    %n –> mudança de linha




  Ficheiro textOutput.txt :

  Saida com PrintWriter.
  Tipos primitivos convertidos em strings:
  boolean =     false
  int     =   1234567
  double = -4.30e-15




                                                   21
Leitura
                       Ficheiro de Texto
   Leitura com Scanner


   Leitura com File Reader

       Criar um objecto do tipo File
        Permite manipular diversos atributos de um ficheiro.

       Criar um canal FileReader ligado ao objecto do tipo File
        Permite a leitura de um ficheiro escrito em formato ASCII.

       Criar um canal tampão BufferedReader ligado objecto do tipo FileReader
        Maior eficiência na leitura de um ficheiro .




                                                                     22
Leitura com Scanner
import java.io.*;                                    Ficheiro textInput.txt:
import java.util.*;                                  123 Primeiro
public class LeituraFicheiro {                       234 Segundo
  public static void main (String arg[]) {
                                                      Saida:
    File file = new File ("textInput.txt");
                                                      Numero inteiro lido: 123
    Scanner scanner = null;
                                                      Primeiro
    try {
                                                      Numero inteiro lido: 234
       scanner = new Scanner (file);
                                                      Segundo
       while( scanner.hasNext())
                                                      Finished executing
       {
          int num = scanner.nextInt();
          System.out.println ("Numero inteiro lido: " +num);
          System.out.println (scanner.next());
          }
    }
    catch (InputMismatchException e) {
      System.out.println ("Mismatch exception:" + e );
    }
    catch (FileNotFoundException e) {
      System.out.println ("Ficheiro não encontrado!");
      System.exit (0);
    } }}

                                                         23
Leitura com FileReader (Ex.1)
                                    Le um ficheiro de texto.
import java.io.*;                   Envia para o ecrã cada linha lida.
import java.util.*;

class LeFicheiro
{
  public static void main(String[] args) throws IOException
  {
    String linha;
    File f;
    FileReader fich;
    BufferedReader entrada = null;




                                                               24
Leitura com FileReader (Ex.1)

try
{
  f        = new File("meuFich.dat");
  fich     = new FileReader(f);
  entrada = new BufferedReader(fich);
  do
  {
     linha = entrada.readLine();
     if (linha != null )
        System.out.println(linha);
   }
   while (linha != null);
}




                                        25
Leitura com FileReader (Ex1)

        catch ( IOException e)
        {
             System.out.println("Erro de I/O.");
             System.out.print(e);
        }
        finally
        {
          System.out.println("fim do programa.");
          if (entrada != null)
             entrada.close();
        }

    }
}




                                                    26
Exemplo 2
import java.io.*;
class ContaDigitoCaracter{
  public static void main(String[] args) throws IOException {
  int proxValor, numMaius=0, numMinu=0, numDigitos=0, numOutros=0;
  char proxCar;                              Lê um ficheiro e retorna os números de:
  String nomeFicheiro;                       digitos; letras maisculas; letras
                                             minusculas e outros caracteres
// Obtem ficheiro do utilizar
    System.out.print(“Nome do ficheiro: ");
    nomeFicheiro = Le.umaString();
    File fich= new File(nomeFicheiro);

    // testa leitura
    if (fich.exists() && fich.canRead())
    {
      // Cria os canais
      BufferedReader fichEnt
        = new BufferedReader(new FileReader(fich));




                                                           27
Exemplo2
// Le do ficheiro
    proxValor = fichEnt.read();
    while (proxValor != -1){
      proxCar = (char) proxValor;
      if (Character.isDigit(proxCar)){
        numDigitos++;
      }
      else if (Character.isUpperCase(proxCar)){
        numMaius++;
      }
      else if (Character.isLowerCase(proxCar)){
        numMinu++;
      }
      else {
        numOutros++;
      }
      proxValor = fichEnt.read();
    }



                                                  28
Exemplo2
                                              Nome do Ficheiro: ContaCar.java
                                      
                                              Numero de digitos: 7
     //fecha canal                            Numero de letras maisculas: 96
     fichEnt.close();                         Numero de letras minusculas: 1001
     //Mostra resultados                      Numero de outros caracteres: 832
     System.out.print(“Numero de digitos: “);
     System.out.println( numDigitos);
     System.out.print(“Numero de letras maisculas: “);
     System.out.println( numMaius);
     System.out.print(“Numero de letras minusculas: “);
     System.out.println( numMinu);
     System.out.print(“Numero de outros caracteres: “);
     System.out.println( numOutros);
    }
    else {
             System.out.print(“não é possível ler ficheiro: “);
             System.out.println(nomeEntrada);
  }
 }
}

                                                         29
Exemplo3 - Ficheiro Texto
Leitura de um Ficheiro e separação de
Ficheiro: accoes.dat dados
ACME 6/1/96 50 46.5 49.75
SP500 6/2/96 124 122 123.5
DWMI 6/1/96 24.5 22.25 24.5



                    Pretende-se manipular um ficheiro (accoes.dat), no
                    qual cada linha contem o registo de uma sessão da
                    bolsa sobre um grupo de acções:
                    Nome da acção, data do registo, valor mais alto
                    obtido, valor mais baixo obtido, valor de fecho.



                                                              30
Exemplo3 - Ficheiro Texto
Leitura de um Ficheiro e separação de
               dados
import java.io.*;
import java.util.*;

public class stock_data {

  public static void main(String args[])
    {
       String nome_accao;
       Date data_registo;
       float valor_alto, valor_baixo, valor_fecho;

        try {
           String linha_str;
           int linha_numero;

            File fich= new File("accoes.dat");

            // Cria os canais
            BufferedReader fichEnt
            = new BufferedReader(new FileReader(fich));

                                                     31
Exemplo3 - Ficheiro Texto
    Leitura de um Ficheiro e separação de
                dados(cont.)

while ((linha_str = fichEnt.readLine()) != null)
{
  StringTokenizer st = new StringTokenizer(linha_str);
  // extrai tokens e os converte para os tipos apropriados

nome_accao     =   st.nextToken();
data_registo   =   new Date(st.nextToken());
valor_alto     =   Float.valueOf(st.nextToken()).floatValue();
valor_baixo    =   Float.valueOf(st.nextToken()).floatValue();
valor_fecho    =   Float.valueOf(st.nextToken()).floatValue();




                                                     32
Exemplo3 - Ficheiro Texto
Leitura de um Ficheiro e separação de
            dados (cont.)
         // mostra resultado
          System.out.println("nome da Accao :" + nome_accao);
          System.out.println("Data Registo :" + data_registo);
          System.out.println("valores: Alto:" + valor_alto +
          " Baixo:" + valor_baixo + " Fecho:" + valor_fecho);
          System.out.println();
        }
        fichEnt.close();
     }
     catch (IOException e)
     {
       System.out.println("Erro I/O: " + e);
     }
    }
}




                                                    33

Mais conteúdo relacionado

PPT
Ficheiros texto
KEY
Python 01
PPTX
Operator Overloading In Python
PPTX
Java: Manipulação de Arquivos
PPTX
Class, object and inheritance in python
PPT
Collections Framework
PDF
Python Functions Tutorial | Working With Functions In Python | Python Trainin...
PDF
Python Variable Types, List, Tuple, Dictionary
Ficheiros texto
Python 01
Operator Overloading In Python
Java: Manipulação de Arquivos
Class, object and inheritance in python
Collections Framework
Python Functions Tutorial | Working With Functions In Python | Python Trainin...
Python Variable Types, List, Tuple, Dictionary

Mais procurados (20)

PPTX
I/O Streams
PPTX
Prática de laboratório utilizando views, stored procedures e triggers
PDF
Aula 1 - Introdução a POO
PDF
Introdução ao Python
POT
Algoritmo 06 - Array e Matrizes
PPTX
Ficheiros em C
PPT
Java Streams
PDF
Java Serialization
PDF
POO - Aula 10 - Polimorfismo
PPTX
datatypes and variables in c language
PDF
JavaScript - Introdução com Orientação a Objetos
PPTX
String, string builder, string buffer
PPT
Java interface
PPT
Capítulo 2 - Sistemas Distribuídos - Coulouris
PPTX
Python: Modules and Packages
DOCX
Exercícios - Herança - Java
PPTX
Java: Encapsulamento e modificadores de acesso
PDF
C++ Files and Streams
PDF
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
PPSX
Strings in Java
I/O Streams
Prática de laboratório utilizando views, stored procedures e triggers
Aula 1 - Introdução a POO
Introdução ao Python
Algoritmo 06 - Array e Matrizes
Ficheiros em C
Java Streams
Java Serialization
POO - Aula 10 - Polimorfismo
datatypes and variables in c language
JavaScript - Introdução com Orientação a Objetos
String, string builder, string buffer
Java interface
Capítulo 2 - Sistemas Distribuídos - Coulouris
Python: Modules and Packages
Exercícios - Herança - Java
Java: Encapsulamento e modificadores de acesso
C++ Files and Streams
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Strings in Java
Anúncio

Semelhante a Ficheiros em JAVA (20)

PDF
Introdução a Java IO
PDF
Entrada e Saída
PPT
http://www.dm.ufscar.br/~waldeck/curso/java/
PPT
http://www.dm.ufscar.br/~waldeck/curso/java/
PPT
Java Básico :: Stream
PPTX
Apresentação java io
PDF
java.io - fluxos (streams) e arquivos
PDF
Aula Persistência 01 (Java)
PDF
Java recursos avançados - streams
PPT
Introdução a conceitos e a Praticas de Programação
PPTX
Curso de Java 10 - (IO Manipulação de Arquivos).pptx
PDF
F I C+ + L P 05
PDF
Computação Científica com SciPy - Brevíssimo Tutorial
PPT
sintaxe basica da linguagem javascript 12
PDF
Python e Linux para a criação de ferramentas para pentest
PPT
Python2.5.ppt
PDF
Slide java Desktop para iniciantes_parte1.pdf
PPT
Java básico - módulo 03: captura de dados
Introdução a Java IO
Entrada e Saída
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/
Java Básico :: Stream
Apresentação java io
java.io - fluxos (streams) e arquivos
Aula Persistência 01 (Java)
Java recursos avançados - streams
Introdução a conceitos e a Praticas de Programação
Curso de Java 10 - (IO Manipulação de Arquivos).pptx
F I C+ + L P 05
Computação Científica com SciPy - Brevíssimo Tutorial
sintaxe basica da linguagem javascript 12
Python e Linux para a criação de ferramentas para pentest
Python2.5.ppt
Slide java Desktop para iniciantes_parte1.pdf
Java básico - módulo 03: captura de dados
Anúncio

Mais de Pedro De Almeida (20)

PDF
APM Model in .NET - PT-pt
PDF
Java memory model primary ref. - faq
PDF
Sistemas Operativos - Processos e Threads
PDF
IP Multicast Routing
PDF
XSD Incomplete Overview Draft
PDF
O Projecto, Gestão de Projectos e o Gestor de Projectos - Parte 1
PDF
Validation of a credit card number
PPT
Classes e Objectos JAVA
PPT
Excepções JAVA
PDF
Sessão 10 Códigos Cíclicos
PDF
Sessao 9 Capacidade de canal e Introdução a Codificação de canal
PDF
Sessão 8 Codificação Lempel-Ziv
PDF
Sessao 7 Fontes com memória e codificação aritmética
PDF
Sessao 5 Redundância e introdução à codificação de fonte
PDF
Sessão 6 codificadores estatísticos
PDF
Sessao 4 - Chaves espúrias e distância de unicidade
PDF
Sessao 3 Informação mútua e equívocos
PDF
Sessao 2 Introdução à T.I e Entropias
PDF
Cripto - Introdução, probabilidades e Conceito de Segurança
PDF
Basic java tutorial
APM Model in .NET - PT-pt
Java memory model primary ref. - faq
Sistemas Operativos - Processos e Threads
IP Multicast Routing
XSD Incomplete Overview Draft
O Projecto, Gestão de Projectos e o Gestor de Projectos - Parte 1
Validation of a credit card number
Classes e Objectos JAVA
Excepções JAVA
Sessão 10 Códigos Cíclicos
Sessao 9 Capacidade de canal e Introdução a Codificação de canal
Sessão 8 Codificação Lempel-Ziv
Sessao 7 Fontes com memória e codificação aritmética
Sessao 5 Redundância e introdução à codificação de fonte
Sessão 6 codificadores estatísticos
Sessao 4 - Chaves espúrias e distância de unicidade
Sessao 3 Informação mútua e equívocos
Sessao 2 Introdução à T.I e Entropias
Cripto - Introdução, probabilidades e Conceito de Segurança
Basic java tutorial

Último (20)

PDF
FLUXOGRAMA CLASSE lll - Acesso estritamente proximal.pdf
PDF
A provisão de jojuador (ramadã) islamismo
PPTX
NR11 - Treinamento Direcao Defensiva - 2023.pptx
PPTX
Filosofia Ocidental Antiga 2025 - versão atualizada
PPTX
16. MODERNISMO - PRIMEIRA GERAÇÃO - EDIÇÃO 2021 (1).pptx
PPTX
HISTÓRIA DO BRASIL - anos de Democracia.pptx
PDF
DAQUISIÇÃO E DESENVOLVIMENTO DA FALA 12 A 24 MESES
PDF
50 anos Hoje - Volume V - 1973 - Manaus Amazonas
PPTX
Trabalho Cidades sustentáveis ou Utopia.pptx
PPTX
A História da Europa na Baixa Idade Média.pptx
PPTX
Reino Monera e Protista: representantes e caracteristicas.pptx
PDF
GESTÃO DA FASE PRÉ-ANALÍTICA- Recomendações da SBPC-ML (3).pdf
PPTX
biossegurança e segurança no trabalho (6).pptx
PPTX
Aula 13 - Tópico Frasal - Argumentação.pptx
PPTX
GUERRAFRIA.pptdddddddddddddddddddddddddx
PPTX
brasilcolnia2-101027184359-phpapp02.pptx
PDF
Ementa 2 semestre PEI Orientação de estudo
PPTX
Realismo e Naturalismo: Aluísio Azevedo.
PPTX
Revolução Industrial - Aula Expositiva - 3U4.pptx
PPTX
Slide_Macronutrientes e Antinutrientes da Dieta Humana.pptx
FLUXOGRAMA CLASSE lll - Acesso estritamente proximal.pdf
A provisão de jojuador (ramadã) islamismo
NR11 - Treinamento Direcao Defensiva - 2023.pptx
Filosofia Ocidental Antiga 2025 - versão atualizada
16. MODERNISMO - PRIMEIRA GERAÇÃO - EDIÇÃO 2021 (1).pptx
HISTÓRIA DO BRASIL - anos de Democracia.pptx
DAQUISIÇÃO E DESENVOLVIMENTO DA FALA 12 A 24 MESES
50 anos Hoje - Volume V - 1973 - Manaus Amazonas
Trabalho Cidades sustentáveis ou Utopia.pptx
A História da Europa na Baixa Idade Média.pptx
Reino Monera e Protista: representantes e caracteristicas.pptx
GESTÃO DA FASE PRÉ-ANALÍTICA- Recomendações da SBPC-ML (3).pdf
biossegurança e segurança no trabalho (6).pptx
Aula 13 - Tópico Frasal - Argumentação.pptx
GUERRAFRIA.pptdddddddddddddddddddddddddx
brasilcolnia2-101027184359-phpapp02.pptx
Ementa 2 semestre PEI Orientação de estudo
Realismo e Naturalismo: Aluísio Azevedo.
Revolução Industrial - Aula Expositiva - 3U4.pptx
Slide_Macronutrientes e Antinutrientes da Dieta Humana.pptx

Ficheiros em JAVA

  • 2. O que é um Canal  Em JAVA, todas os aspectos que se relacionam com as diferentes formas de se realizar a leitura e a escrita de dados a partir de uma fonte e para um destino, são reunidas, e abstraídas, no conceito de canal.  Um Canal é uma abstracção que pode representar quer uma fonte genérica de entrada de dados ou um destino genérico para escrita de dados de acesso sequencial e independente de dispositivos físicos concretos, formatos ou até de mecanismos de optimização de leitura e escrita.  Em JAVA, existem duas grandes classes de canais, designadamente:  Canais de caracteres (canais de texto)  Canais de bytes (canais binárias) 2
  • 3. Classes Base  Todos as classes , que implementam formas particulares de Leitura e Escrita em canais, são derivadas de quatro classes abstractas, são elas:  Para os canais de bytes: InputStream e OutputStream  Para os canais de caracteres: Reader e Writer (associados aos ficheiros)  Estas classes sendo abstractas definem o conjunto de métodos que uma qualquer implementação de tais canais deverá concretizar.  JAVA oferece serviços básicos de Entrada e Saída através de dois canais associados respectivamente às operações de bytes associada a leitura do teclado ou a e escrita no monitor:  System.in: Leitura no teclado  System.out: Escrita no monitor 3
  • 4. Canal de leitura: System.in  System.in: É o canal de leitura standard  Por omissão lê o teclado  Podemos usar System.in de várias maneiras  Directamente (acesso básico)  Em conjunto com outros canais (acesso combinado) 4
  • 5. Wrappers & Buffers O package java.io está inteligentemente desenhado. InputStreamReader Algumas das classes funcionam como classes embrulho (wrapper classes) e destinam-se a acrescentar System.in funcionalidade aos canais existentes. Por Exemplo: •InputStreamReader: Permite ler um caracter do teclado sem ser necessário converte-lo manualmente. InputStreamReader (read()) System.in •BufferedReader: Permite ler uma cadeia de caracteres do teclado sem ser necessário converte-lo manualmente BufferedReader (readLine()). 5
  • 6. Ler do teclado (Java 1.4) try { BufferedReader r = new BufferedReader( new InputStreamReader(System.in)); String s = r.readLine() ; int i = (new Integer(s)).intValue() ; System.out.println(i) ; } catch (IOException e) { } 6
  • 7. Canais de Bytes ByteArrayInputStream DataInputStream DataInput FileInputStream BufferedInputStream FilterInputStream LineNumberInputStream InputStream SequenceInputStream PushBackInputStream PipedInputStream ObjectInputStream ObjectInput Object StringBufferInputStream ByteArrayOutputStream FileOutputStream BufferedOutputStream OutputStream FilterOutputStream DataOutputStream DataOutput PipedOutputStream PrintStream ObjectOutputStream ObjectOutput RandomAccessFile 7
  • 8. Canais de Caracteres CharArrayReader InputStreamReader FileReader FilterReader PushBackReader Reader StringReader PipedReader BufferedReader LineNumberReader Object BufferedWriter CharArrayWriter OutputStreamWriter FileWriter Writer FilterWriter PipedWriter PrintWriter StringWriter StreamTokenizer 8
  • 9. Classe Scanner (JAVA 5.0)  A classe Scanner, introduzida com a versão J2SE 5.0, é uma classe nova que permite converter o texto para tipos primitivos.  java.util.Scanner  O texto pode ser obtido das mais diversas fontes tais como objectos do tipo:  Strings  InputStream  Ficheiros  A classe Scanner permite separar o texto em tokens, que são sequências de caracteres separados por delimitadores.  Por defeito, os delimitadores são os espaços em branco, tabs e mudanças de linha. 9
  • 10. Leitura do Teclado  Para ler de forma confortável texto do canal de entrada padrão, é preciso criar primeiro um Scanner sobre canal System.in que esta associado ao teclado Scanner sc = new Scanner(System.in);  Para cada um dos tipos primitivos há um método correspondente com a assinatura nextXxx() que retorne um valor desse tipo.  Se a string não puder ser interpretada como sendo deste tipo, é lançado uma excepção do tipo InputMismatchException.  Exemplos de algumas leituras de tokens:  String aToken = sc.next() ; //Lê um token  int num1 = sc.nextInt() ; //Lê um token inteiro  double num2 = sc.nextDouble() ; //Lê um token real  String linha = sc.nextLine() ; //Lê uma linha 10
  • 11. Exemplo: Ler do teclado (Java 5.0) import java.io.*; import java.util.*; class ExScanner{ public static void main(String[] args) { { Scanner scanTeclado = new Scanner(System.in); System.out.println ("Introduza um inteiro"); try { int num = scanTeclado.nextInt(); System.out.println ("Numero introduzido:" + num); } catch (InputMismatchException e) { System.out.println ("Erro na leitura do valor:" + e ); } } } 11
  • 12. Exemplo: Ler do teclado (Java 5.0) import java.io.*; import java.util.*; class ExScanner{ public static void main(String[] args) { { String str = "Vamos experimentar o scanner"; Scanner scanStr = new Scanner(str); while (scanStr.hasNext()) { System.out.println ("Token:" + scanStr.next()); } } } } 12
  • 13. Exemplo: Ler do teclado (Java 5.0) Ler int (e.g. 3501): Introduziu 123 import java.io.*; import java.util.*; Ler float (e.g. 2,43): Introduziu 2.34 public class ScanConsoleApp{ public static void main (String arg[]) { // Cria um scanner para ler do teclado Scanner scanner = new Scanner (System.in); try { System.out.printf (“Ler int (e.g. %4d): ",3501); int int_val = scanner.nextInt (); System.out.println (" Introduziu " + int_val +"n"); System.out.printf (“Ler float (e.g. %5.2f): ", 2.43); float float_val = scanner.nextFloat (); System.out.println (" Introduziu " + float_val +"n"); } catch (InputMismatchException e) { System.out.println (“Erro na leitura do valor:" + e ); } } } 13
  • 14. Ficheiros  Um ficheiro é uma entidade de armazenamento de informação permanente.  A manipulação de ficheiros é feita pela utilização de canais que derivam das classes: InputStream; Reader; OutputStream; Writer.  Os ficheiros, de acordo com o tipo de informação que podem armazenar, podem ser classificada em: Ficheiros de Texto (Orientado ao caracter)  Derivam das classes : Reader e Writer.  Fácil de ser lido por humanos com ferramentas simples (type, more, edit, ...).  Linhas com comprimento variável.  Cada linha termina com uma marca.  Exemplo: ficheiro com código-fonte em Java. Ficheiro de Dados (Orientado ao byte)  Derivam das classes : InputStream e OutputStream.  Apropriado para o processamento por ferramentas automáticas.  Armazenamento de tipos primitivos, serialização de objectos, etc.  Armazenamento independente da plataforma. 14
  • 15. A Classe File  A classe File representa os ficheiros e directorias de um sistemas de ficheiros.  Esta classe define métodos para a realização das operações sobre ficheiros e directorias:  listagem de directorias  apagar um ficheiro  determinar atributos de um ficheiro, alterar o seu nome, etc.  Definição:  File entFich = new File(cadeia de caracteres); 15
  • 16. Os métodos da Classe File CONSTRUTORES  File(String caminho) construtor de directórios/ficheiros  File(String caminho,String nome) construtor com nome separado do caminho  File(String directorio, String nome) construtor com directório e nome do ficheiro MÉTODOS  boolean canRead() ficheiro/directório pode ser lido  boolean canWrite() pode-se gravar no ficheiro/directório  boolean delete() apaga ficheiro/directório  boolean exists() verifica se ficheiro/directório existem  boolean isAbsolute() verifica se caminho é absoluto  boolean isDirectory() verifica se objecto é directório  boolean isFile() verifica se objecto é ficheiro  boolean mKdir() cria directório do objecto  boolean mKdirs() cria directórios do caminho  boolean renameTo(String novo) muda nome do ficheiro/directório para novo 16
  • 17. Exemplo: Classe File import java.io.*; class Exemplo { public static void main(String[] args) throws IOException { File meuFicheiro = new File(”dados.dat”); if (meuFicheiro.exists()) System.out.println(“dados.dat existe"); else System.out.println(" dados.dat não existe"); } } Testa a existência do ficheiro “dados.dat” 17
  • 18. Escrita Ficheiro de Texto  Passos necessários para criar um ficheiro de Texto  Criar um objecto do tipo File. Permite manipular diversos atributos de um ficheiro.  Criar um canal FileWriter ligado ao objecto File. Permite associar um ficheiro de texto a um canal de escrita.  Criar um canal tampão BufferedWriter ligado ao objecto FileWriter. Maior eficiência na escrita de um ficheiro.  Criar um canal PrintWriter ligado ao objecto BufferedWriter. Permite a utilização dos métodos print e println. 18
  • 19. Escrita com PrintWriter import java.io.*; public class PrintWriterFileApp{ public static void main (String arg[]) { File file = null; file = new File ("textOutput.txt"); try { FileWriter file_writer = new FileWriter (file); BufferedWriter buf_writer = new BufferedWriter (file_writer); PrintWriter print_writer = new PrintWriter (buf_writer); print_writer.println ("Saida com PrintWriter."); print_writer.println ("tipos primitivos convertidos em strings:"); boolean a_boolean = false; int an_int = 1234567; print_writer.println (a_boolean); print_writer.println (an_int); } catch (IOException ioe){ System.out.println("IO Exception"); } } } 19
  • 20. Escrita num ficheiro de Texto (formatado) import java.io.*; public class PrintWriterFileApp{ public static void main (String arg[]) { File file = null; file = new File ("textOutput.txt"); Formatter formatter; try { formatter = new Formatter (file); formatter.format ("Saida com PrintWriter. %n"); formatter.format ("tipos primitivos convertidos em strings: %n"); boolean a_boolean = false; int an_int = 1234567; double a_double = -4.297e-15; formatter.format ("boolean = %9b %n", a_boolean); formatter.format ("int = %9d %n", an_int); formatter.format ("double = %9.2e %n", a_double); formatter.flush (); formatter.close (); } catch (IOException ioe){ System.out.println("IO Exception"); } }} 20
  • 21. Escrita num ficheiro de Texto (formatado) formatter.format ("Saida com PrintWriter. %n"); %n –> mudança de linha Ficheiro textOutput.txt : Saida com PrintWriter. Tipos primitivos convertidos em strings: boolean = false int = 1234567 double = -4.30e-15 21
  • 22. Leitura Ficheiro de Texto  Leitura com Scanner  Leitura com File Reader  Criar um objecto do tipo File Permite manipular diversos atributos de um ficheiro.  Criar um canal FileReader ligado ao objecto do tipo File Permite a leitura de um ficheiro escrito em formato ASCII.  Criar um canal tampão BufferedReader ligado objecto do tipo FileReader Maior eficiência na leitura de um ficheiro . 22
  • 23. Leitura com Scanner import java.io.*; Ficheiro textInput.txt: import java.util.*; 123 Primeiro public class LeituraFicheiro { 234 Segundo public static void main (String arg[]) { Saida: File file = new File ("textInput.txt"); Numero inteiro lido: 123 Scanner scanner = null; Primeiro try { Numero inteiro lido: 234 scanner = new Scanner (file); Segundo while( scanner.hasNext()) Finished executing { int num = scanner.nextInt(); System.out.println ("Numero inteiro lido: " +num); System.out.println (scanner.next()); } } catch (InputMismatchException e) { System.out.println ("Mismatch exception:" + e ); } catch (FileNotFoundException e) { System.out.println ("Ficheiro não encontrado!"); System.exit (0); } }} 23
  • 24. Leitura com FileReader (Ex.1) Le um ficheiro de texto. import java.io.*; Envia para o ecrã cada linha lida. import java.util.*; class LeFicheiro { public static void main(String[] args) throws IOException { String linha; File f; FileReader fich; BufferedReader entrada = null; 24
  • 25. Leitura com FileReader (Ex.1) try { f = new File("meuFich.dat"); fich = new FileReader(f); entrada = new BufferedReader(fich); do { linha = entrada.readLine(); if (linha != null ) System.out.println(linha); } while (linha != null); } 25
  • 26. Leitura com FileReader (Ex1) catch ( IOException e) { System.out.println("Erro de I/O."); System.out.print(e); } finally { System.out.println("fim do programa."); if (entrada != null) entrada.close(); } } } 26
  • 27. Exemplo 2 import java.io.*; class ContaDigitoCaracter{ public static void main(String[] args) throws IOException { int proxValor, numMaius=0, numMinu=0, numDigitos=0, numOutros=0; char proxCar; Lê um ficheiro e retorna os números de: String nomeFicheiro; digitos; letras maisculas; letras minusculas e outros caracteres // Obtem ficheiro do utilizar System.out.print(“Nome do ficheiro: "); nomeFicheiro = Le.umaString(); File fich= new File(nomeFicheiro); // testa leitura if (fich.exists() && fich.canRead()) { // Cria os canais BufferedReader fichEnt = new BufferedReader(new FileReader(fich)); 27
  • 28. Exemplo2 // Le do ficheiro proxValor = fichEnt.read(); while (proxValor != -1){ proxCar = (char) proxValor; if (Character.isDigit(proxCar)){ numDigitos++; } else if (Character.isUpperCase(proxCar)){ numMaius++; } else if (Character.isLowerCase(proxCar)){ numMinu++; } else { numOutros++; } proxValor = fichEnt.read(); } 28
  • 29. Exemplo2 Nome do Ficheiro: ContaCar.java  Numero de digitos: 7 //fecha canal Numero de letras maisculas: 96 fichEnt.close(); Numero de letras minusculas: 1001 //Mostra resultados Numero de outros caracteres: 832 System.out.print(“Numero de digitos: “); System.out.println( numDigitos); System.out.print(“Numero de letras maisculas: “); System.out.println( numMaius); System.out.print(“Numero de letras minusculas: “); System.out.println( numMinu); System.out.print(“Numero de outros caracteres: “); System.out.println( numOutros); } else { System.out.print(“não é possível ler ficheiro: “); System.out.println(nomeEntrada); } } } 29
  • 30. Exemplo3 - Ficheiro Texto Leitura de um Ficheiro e separação de Ficheiro: accoes.dat dados ACME 6/1/96 50 46.5 49.75 SP500 6/2/96 124 122 123.5 DWMI 6/1/96 24.5 22.25 24.5 Pretende-se manipular um ficheiro (accoes.dat), no qual cada linha contem o registo de uma sessão da bolsa sobre um grupo de acções: Nome da acção, data do registo, valor mais alto obtido, valor mais baixo obtido, valor de fecho. 30
  • 31. Exemplo3 - Ficheiro Texto Leitura de um Ficheiro e separação de dados import java.io.*; import java.util.*; public class stock_data { public static void main(String args[]) { String nome_accao; Date data_registo; float valor_alto, valor_baixo, valor_fecho; try { String linha_str; int linha_numero; File fich= new File("accoes.dat"); // Cria os canais BufferedReader fichEnt = new BufferedReader(new FileReader(fich)); 31
  • 32. Exemplo3 - Ficheiro Texto Leitura de um Ficheiro e separação de dados(cont.) while ((linha_str = fichEnt.readLine()) != null) { StringTokenizer st = new StringTokenizer(linha_str); // extrai tokens e os converte para os tipos apropriados nome_accao = st.nextToken(); data_registo = new Date(st.nextToken()); valor_alto = Float.valueOf(st.nextToken()).floatValue(); valor_baixo = Float.valueOf(st.nextToken()).floatValue(); valor_fecho = Float.valueOf(st.nextToken()).floatValue(); 32
  • 33. Exemplo3 - Ficheiro Texto Leitura de um Ficheiro e separação de dados (cont.) // mostra resultado System.out.println("nome da Accao :" + nome_accao); System.out.println("Data Registo :" + data_registo); System.out.println("valores: Alto:" + valor_alto + " Baixo:" + valor_baixo + " Fecho:" + valor_fecho); System.out.println(); } fichEnt.close(); } catch (IOException e) { System.out.println("Erro I/O: " + e); } } } 33