A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense.

Apresentações semelhantes


Apresentação em tema: "I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense."— Transcrição da apresentação:

1 I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense

2 Introdução Arquivos fornecem aos sistemas uma alternativa para persistência de dados; Com isso, informações gravadas num momento podem ser recuperadas noutro, mesmo que a luz acabe; Em Java, interfaces e classes para a manipulação de arquivos estão disponíveis no pacote java.io (http://java.sun.com/javase/6/docs/api/java/io/pa ckage-summary.html).

3 Tipos de Arquivos Arquivos podem armazenar caracteres (arquivo texto) ou bytes (arquivos binários); Na prática, arquivos textos são abertos por editores de texto simples, enquanto que arquivos binários precisam ser abertos por programas específicos; Exemplos de arquivos: Texto (qualquer arquivo que só armazene texto):.txt,.xml,.bat … Binário (possuem uma codificação de bytes específica):.doc,.exe,.zip, …

4 Abertura de Arquivos Arquivos podem ser abertos para leitura (arquivo já existente) ou escrita (tanto faz); Esta abertura é usualmente realizada através da chamada à um construtor de classe apropriado (new): FileInputStream e FileOutputStream para leitura e escrita de arquivos vistos como uma sequência de bytes; FileReader e FileWriter para leitura e escrita de arquivos vistos como uma sequência de caracteres;

5 Fechamento de Arquivos Para o fechamento utilizamos o método close(); Antes da chamada a este método, o arquivo manipulado fica bloqueado para o programa que o utiliza; Por isso, é uma prática recomendável fechar o arquivo imediatamente após a sua utilização.

6 Exemplo de Leitura de Arquivo Binário import java.io.*; public class MostraArquivo { public static void main(String[] args) { InputStream fi = null; int i = -1; try { fi = new FileInputStream("c:\\teste.txt"); } catch (FileNotFoundException e) { System.out.println("Arquivo não encontrado !!"); } do { try { i = fi.read(); } catch (IOException e) { System.out.println("Arquivo não pode ser lido !!"); } if (i != -1) System.out.print((char) i); } while (i != -1); }

7 Exemplo de Leitura de Arquivo Texto import java.io.*; public class MostraArquivoTexto { public static void main(String[] args) { BufferedReader in = null; try { in = new BufferedReader(new FileReader("c:\\teste.txt")); String str; while ((str = in.readLine()) != null) { System.out.println(str); } in.close(); } catch (IOException e) { }

8 Diferenças na Leitura de Arquivos Texto e Binário Pudemos observar que o arquivo binário dado estava sendo processado byte a byte; Em contra-partida, o arquivo texto estava sendo acessado linha por linha (método readLine()); Por processar vários bytes ao mesmo tempo, a leitura linha por linha é mais simples; Em arquivos binários não há o conceito de linha.

9 Manipulação de Arquivos Binários A manipulação de arquivos binários possibilita mais eficiência no tratamento de arquivos; Para exemplificar, apresentaremos um exemplo de gravação de objetos (serialização); Neste exemplo, criaremos um conjunto de objetos, gravaremos estes num arquivo binário, e posteriormente recuperaremos seu conteúdo; Para um objeto ser serializável, sua classe precisa implementar a classe java.io.Serializable; Objetos que usualmente não são serializáveis são threads, sockets, etc. Mais informações: ng/serialization/

10 Manipulação de Arquivos Binários 1/4 import java.io.*; public class Registro implements Serializable { int id; float nota; static int quant = 0; public Registro (float n) { quant++; id = quant; nota = n; }

11 Manipulação de Arquivos Binários 2/4 public static void main(String[] args) { InicializaRegistros(); RecuperaRegistros(); }

12 Manipulação de Arquivos Binários 3/4 public static void InicializaRegistros() { try { Registro reg = null; FileOutputStream f = new FileOutputStream("c:\\dados.dat"); ObjectOutputStream fobj = new ObjectOutputStream(f); for (int i=1; i<=10; i++) { reg = new Registro(i); fobj.writeObject(reg); } fobj.close(); f.close(); } catch (FileNotFoundException e) { } catch (IOException e) { }

13 Manipulação de Arquivos Binários 4/4 public static void RecuperaRegistros() { try { FileInputStream f = new FileInputStream("c:\\dados.dat"); ObjectInputStream fobj = new ObjectInputStream(f); for (int i=1; i<=10; i++) { Registro reg = (Registro)fobj.readObject(); System.out.print("Id: " + reg.id); System.out.println(" Nota: " + reg.nota); } fobj.close(); f.close(); } catch (FileNotFoundException e) { } catch (IOException e) { } catch (ClassNotFoundException e) { }

14 Parte da Hierarquia de Classes de java.io

15 Classe File A classe File provê construtores e métodos para a obtenção de dados sobre arquivos Esta classe apresenta uma visão abstrata e independente do sistema operacional utilizado para referência a arquivos e diretórios

16 Classe File Como exemplo de abstração, o campo estático File.separator indica o caracter usado para separar nomes em caminhos: (\ no Windows e / no Linux) Uma ilustração desta abstração acontece quando criamos um objeto do tipo File com 2 argumentos diferentes:..\cursojava\temp\teste.txt../cursojava/temp/texte.txt Em ambos os casos, ele converterá os separadores para o formato do sistema em uso Observe que este caracter também pode ser obtido como uma propriedade do sistema: System.getProperty(file.separator)

17 Classe File Alguns métodos importantes oferecidos por esta classe: public File(String nome) throws NullPointerException; Construtor que cria uma referência para o arquivo com o nome passado como argumento; public File(String dir, String nome) throws NullPointerException; Similar ao construtor dado acima. Entretanto, também pode ser fornecido o nome do diretório onde o arquivo será referenciado;

18 Classe File Outros métodos importantes : public String[] getPath(); Caminho completo do arquivo public void mkdir() throws SecurityException; Cria um novo diretório public boolean renameTo(File novo) throws SecurityException; Renomeia o diretório para o valor que é passado por parâmetro public boolean delete() throws SecurityException; Remove o arquivo ao qual o método foi aplicado

19 Exemplo de Uso da Classe File import java.io.File; public class ExemploFile { public static void main(String[] args) { File f = new File("c:\\teste.txt"); if (f.exists()) { System.out.println("Dados do arquivo " + f.getAbsolutePath()); System.out.println("Tamanho: " + f.length() + " bytes"); System.out.println("Pode ser escrito? " + (f.canWrite() ? "sim" : "não")); }

20 Exercícios Implemente o exemplo de arquivos binários. Faça um programa que crie uma cópia de um arquivo texto.

21 Solução do Segundo Exercício import java.io.*; public class CopiaArquivoTexto { public static void main(String[] args) { BufferedReader in = null; BufferedWriter out = null; try { in = new BufferedReader(new FileReader("c:\\teste.txt")); out = new BufferedWriter(new FileWriter("c:\\teste2.txt")); String str; while ((str = in.readLine()) != null) { out.write(str); } in.close(); out.close(); } catch (IOException e) { }


Carregar ppt "I/O Carlos Bazilio Depto de Ciência e Tecnologia Pólo Universitário de Rio das Ostras Universidade Federal Fluminense."

Apresentações semelhantes


Anúncios Google