Manipulação de Arquivos • Introdução • Tipos de Fluxo de Dados e de Arquivos • Manipulação de Arquivos em Java − Classes FileReader e FileWriter − Classes FileInputStream e FileOutputStream − Classe RandomAccessFile • Visão Geral sobre a Manipulação de Arquivos em C/C++ 09:14 Manipulação de Arquivos 09:14 • Programas manipulam dados que geralmente se encontram na memória do computador; • Ex.: variáveis declaradas em um programa • Esses dados são perdidos quando o programa é finalizado Manipulação de Arquivos 09:14 Manipulação de Arquivos 09:14 • Problema: como recuperar dados obtidos em uma execução anterior do programa? • Solução: armazenar esses dados em disco na forma de arquivos • Os arquivos permitem o armazenamento de dados por um longo período de tempo, em uma memória não-volátil, de forma independente do programa que o manipula Manipulação de Arquivos 09:14 tempo execução Escreve tempo Lê tempo Arquivo Manipulação de Arquivos 09:14 • O fluxo de dados entre a aplicação e o arquivo pode ser de entrada ou de saída • Fluxo de Entrada: a aplicação lê dados do arquivo e armazena em uma variável Programa Java Arquivo • Fluxo de Saída: a aplicação escreve o valor de uma variável no arquivo Programa Java Arquivo Manipulação de Arquivos 09:14 • Os arquivos podem ser classificados em arquivos de texto ou arquivos binários • Arquivos de texto: são compostos por uma série de caracteres ascii agrupados em uma ou mais linhas. São compreendidos pelos seres humanos. •Arquivos binários: composto por uma série de bytes representados por caracteres não compreendidos pelo ser humano. São menores que os arquivos de texto. Ex.: imagens, vídeo, áudio, etc. Manipulação de Arquivos 09:14 • Pacote java.io possui as classes para a manipulação de arquivos (import java.io.*;); •Essas classes são divididas em duas hierarquias de acordo com o tipo de arquivos que manipulam: •FileInputStream/FileOutputStream (arquivos binários) •FileReader/FileWriter (arquivos de texto) •Os arquivos e diretórios podem ser representados através da classe File Manipulação de Arquivos 09:14 • public String getParent(); retorna o diretório pai •public list(); retorna lista de arquivos contidos no diretório •public boolean isFile(); retorna se é um arquivo •public boolean isDirectory(); retorna se é um diretório •public boolean delete(); tenta apagar o diretório ou arquivo •public long length(); retorna o tamanho do arquivo em bytes •public boolean mkdir(); cria um diretório com o nome do arquivo •public String getAbsolutePath(); retorna o caminho absoluto •public String getPath(); •public String getName(); Manipulação de Arquivos 09:14 Manipulação de Arquivos • Utilizada para escrita em arquivos de texto •Construtores: •public FileReader(String name) •public FileReader(File file) • Usa o método read() para ler um caracter por vez 09:14 Manipulação de Arquivos • Exemplo 09:14 Manipulação de Arquivos • Para agilizar a leitura é usada a classe BufferedReader 09:14 Manipulação de Arquivos • Para agilizar a leitura é usada a classe BufferedReader 09:14 Manipulação de Arquivos • Utilizada para escrita em arquivos de texto •Construtores: •public FileWriter(String name) •public FileWriter(String name, boolean append) •public FileWriter(File file) •public FileWriter(File file, boolean append) • Usa o método write() para escrever um caracter por vez 09:14 Manipulação de Arquivos • Exemplo 09:14 Manipulação de Arquivos • Para agilizar a escrita é utilizada a classe BufferedWriter 09:14 Manipulação de Arquivos • Utilizada para escrita em arquivos binários •Construtores: •public FileOutputStream(String name) •public FileOutputStream(String name, boolean append) •public FileOutputStream(File file) •public FileOutputStream(File file, boolean append) 09:14 Manipulação de Arquivos • Exemplo: • Exercício: escrever em um arquivo o texto digitado no teclado 09:14 Manipulação de Arquivos • Utilizada para leitura de arquivos binários •Construtores: •public FileInputStream(String name) •public FileInputStream(File file) 09:14 Manipulação de Arquivos 09:14 • Dados dois arquivos arq1 e arq2, desenvolva programas em java que implementem as seguintes funcionalidades: • copia o conteúdo do arq1 para arq2 • copia o conteúdo do arq1 para arq2, ao final dele (append) • imprime na tela todo o conteúdo do arquivo arq1 • Obs.: os arquivos arq1 e arq2 são arquivos de texto Manipulação de Arquivos 09:14 • Classe que permite a leitura e escrita em um arquivo com acesso randômico •Possui um file pointer que indica a posição atual para acessar o arquivo • o file pointer pode ser obtido através do método getFilePointer e alterado através do método seek Manipulação de Arquivos • Exemplo de leitura 09:14 Manipulação de Arquivos 09:14 • Diferente de Java, as principais funções para manipulação de arquivos em C/C++ não utilizam os conceitos de orientação a objetos • Para manipular arquivos com essas funções deve ser seguida a sequência de operacões: • abrir o arquivo – fopen() • ler/escrever no arquivo – getc()/putc() – fgets()/fputs() – fscanf() /fprintf() •Fechar o arquivo – fclose() Manipulação de Arquivos • Java: Como Programar, HARVEY M. DEITEL & PAUL J. DEITEL, Prentice-Hall, 2005. •Head First Java, KATHY SIERRA & BERT BATEA, O´Reilly, 2005. •C Completo e Total, HERBERT SCHILDT, Makron Books, 1997. • www.dca.ufrn.br/~clauber/ 09:14