Manipulação de Arquivos

Documentos relacionados
Motivação. Java First-Tier: Aplicações. Entrada & Saída. Stream de Entrada. Stream de Saída. Pacote java.io. Leitura e Escrita de Streams

Módulo VIII Linguagem Java Entrada e Saída de Dados Arquivos

Como pôde verificar, a criação de um objecto do tipo File não cria o ficheiro em disco.

AULA TEÓRICA 4. Tema 5. Ficheiros. Ficheiro do tipo texto. Ficheiros de Objectos. Ø Classe File Ø Criação. Manipulação. Ø Classe StringTokenizer

Reader e Writer para streams de caracteres (texto).

Reader e Writer para streams de caracteres (texto).

InputStream e OutputStream para ler/ escrever bytes e das classes abstractas Reader e Writer para ler /escrever caracteres (texto).

Streams e Ficheiros I/O

Existe uma quantidade de informação que pode ser armazenada para resolver o problema.

Entrada e Saída Exercício. Linguagem Java. Adenilso da Silva Simão 01/09/05

Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria

10 Arquivos e fluxos. Desenvolvimento OO com Java. Vítor E. Silva Souza

Notas de POO: interfaces, excepções e input/output

Aula: ARQUIVOS. Introdução à Ciência da Computação I Simone Senger Souza. ICMC/USP São Carlos

Aula de Arquivos. Jesimar da Silva Arantes. Instituto de Ciências Matemáticas e de Computação Universidade de São Paulo - São Carlos, SP

P R O G R A M A. Stream Stream. Stream. Figura 1. Streams representam fluxos unidirecionais de dados, seja em entrada ou saída.

Array de objectos Array de objectos Criação Exemplo:

LP2 Laboratório de Programação 2 Ciência da Computação. Arquivos

Projeto V (U900005) Ciências da Computação Projeto II (U900003) Engenharia da Computação Prof. Valdir Gil Pillat

Arquivos. Profa. Thienne Johnson EACH/USP

Lista de Comandos: Arquivo texto e Binário

21/05/2013. Informações Complexas. Arquivos de Texto e Arquivos Binários. Hierarquia de Dados. Armazena Informação. Classificação de Arquivos

Arquivos. Introdução à Programação SI1

Computação Eletrônica. Aula 12 Arquivos Texto e Binário. Prof: Luciano Barbosa. CIn.ufpe.br

LINGUAGEM C: ARQUIVOS

LINGUAGEM C: ARQUIVOS

Sumário. Ficheiros. Ficheiros

Input / Output na linguagem java. Para isso usamos um dos construtores da classe java.io.file:

Introdução à Computação II AULA 08 BCC Noturno - EMA896115B

Programação Orientada a Objetos com Java. Prof. Júlio Machado julio.machado@pucrs.br

Decorator e Composite. Nazareno Andrade (baseado no material de Hyggo Almeida)

ALOCAÇÃO DINÂMICA DE MEMÓRIA

Linguagem de Programação C. Arquivos

Aula 28: Arquivos de texto

Programação. MEAer e LEE. Manipulação de ficheiros de texto. Bertinho Andrade da Costa. Instituto Superior Técnico. 2010/2011 1º Semestre

Linguagem C. Armazenamento de Dados em Arquivos - Continuação

CAP. IX - MANIPULAÇÃO DE ARQUIVOS Generalidades sobre Arquivos. 9.2 Abertura e Fechamento de Arquivos. Operações com arquivos:

Aplicação de Árvores: Código de Huffman

Ler e escrever bytes, caracteres e Strings de/para a entrada e saída padrão. Ler e escrever bytes, caracteres e Strings de/para arquivos

Alocação Dinâmica de Memória - Exercício

PROGRAMAÇÃO JAVA. Parte 3

Este capítulo apresenta as técnicas de manipulação de arquivos texto, binários e suas principais funções de I/O.

CURSO BÁSICO DE PROGRAMAÇÃO AULA 15. Revisão Vetores e Matrizes Trabalho

Linguagem C arquivos. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 5 Pilhas

Transcrição:

Manipulação de Arquivos SCC0604 - Programação Orientada a Objetos Prof. Fernando V. Paulovich http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br Instituto de Ciências Matemáticas e de Computação (ICMC) Universidade de São Paulo (USP) 18 de novembro de 2010

Conceitos Básicos Sumário 1 Conceitos Básicos 2 Leitura/Gravação de Texto 3 Leitura/Gravação Streamming 4 Leitura/Gravação Objetos

Conceitos Básicos Sumário 1 Conceitos Básicos 2 Leitura/Gravação de Texto 3 Leitura/Gravação Streamming 4 Leitura/Gravação Objetos

Conceitos Básicos Introdução Java oferece várias classes para escrita e leitura de arquivos A seguir vamos ver algumas delas

Conceitos Básicos Tipos de Arquivos Os arquivos podem ser classicados 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

Conceitos Básicos Manipulação de Arquivos Pacote java.io possui as classes para a manipulação de arquivos 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

Conceitos Básicos Classe File 1 public list(); //retorna lista de arquivos contidos no diretório 2 public boolean isfile(); //retorna se é um arquivo 3 public boolean isdirectory(); //retorna se é um diretório 4 public boolean delete(); //tenta apagar o diretório ou arquivo 5 public long length(); //retorna o tamanho do arquivo em bytes 6 public boolean mkdir(); //cria um diretório com o nome do arquivo 7 public String getabsolutepath(); //retorna o caminho absoluto 8 public String getpath(); //retorna o caminho 9 public String getname(); //retorno o nome do arquivo 10...

Conceitos Básicos Classe File 1 File dir = new File("dir"); 2 boolean res = dir.mkdir(); //cria diretório 3 4 if (res dir.exists()) { //verica se criou ou se já existe 5 File subdir = new File(dir, "subdir"); 6 subdir.mkdir(); //cria subdiretório 7 8 File arq = new File(dir, "arquivo.txt"); 9 arq.createnewfile(); //cria um arquivo vazio 10 11 File[] arqs = dir.listfiles(); //retorna a lista de arquivos 12 for (File f : arqs) { 13 System.out.println(f); 14 } 15 16 //apagando o que foi criado 17 for (File f : arqs) { 18 f.delete(); 19 } 20 dir.delete(); //diretório tem que estar vazio 21 }

Leitura/Gravação de Texto Sumário 1 Conceitos Básicos 2 Leitura/Gravação de Texto 3 Leitura/Gravação Streamming 4 Leitura/Gravação Objetos

Leitura/Gravação de Texto Classe FileReader Utilizada para escrita em arquivos de texto Construtores public FileReader(String name) public FileReader(File le) Usa o método read() para ler um caracter por vez

Leitura/Gravação de Texto Classe FileReader 1 FileReader reader = new FileReader(new File("Main.java")); 2 3 int c; 4 while((c = reader.read())!= -1) { 5 System.out.print((char)c); 6 } 7 8 reader.close();

Leitura/Gravação de Texto Classe BueredReader Para acelerar a leitura é usada a classe BueredReader

Leitura/Gravação de Texto Classe BueredReader Para acelerar a leitura é usada a classe BueredReader 1 FileReader reader = new FileReader(new File("Main.java")); 2 BufferedReader breader = new BufferedReader(reader); 3 4 String linha = null; 5 while ((linha = breader.readline())!= null) { 6 System.out.println(linha); 7 } 8 9 breader.close(); 10 reader.close();

Leitura/Gravação de Texto Classe StringTokenizer Para pegar palavras individuais de uma linha é possível usar a classe StringTokenizer O delimitador das palavras é informado no construtor da classe StringTokenizer 1 FileReader reader = new FileReader(new File("Main.java")); 2 BufferedReader breader = new BufferedReader(reader); 3 4 String linha = null; 5 while ((linha = breader.readline())!= null) { 6 //O primeiro argumento é a string e o segundo é o delimitador 7 StringTokenizer st = new StringTokenizer(linha, " "); 8 9 while(st.hasmoretokens()) { 10 System.out.print(st.nextToken()); 11 } 12 13 System.out.println(); 14 } 15 16 breader.close(); 17 reader.close();

Leitura/Gravação de Texto Classe FileWriter Utilizada para escrita em arquivos de texto Construtores public FileWriter(String name) public FileWriter(String name, boolean append) public FileWriter(File le) public FileWriter(File le, boolean append) Usa o método write() para escrever um caractere por vez ou uma string por vez

Leitura/Gravação de Texto Classe FileWriter 1 FileWriter writer = new FileWriter(new File("teste.txt")); 2 3 char c; 4 while ((c = (char) System.in.read())!= '\n') { 5 writer.write(c); 6 } 7 8 writer.close(); //nunca esquecer de fechar o arquivo

Leitura/Gravação de Texto Classe BueredWriter Para agilizar a escrita é utilizada a classe BueredWriter 1 FileWriter writer = new FileWriter(new File("teste.txt")); 2 BufferedWriter bwriter = new BufferedWriter(writer); 3 4 bwriter.write("escrever 1a linha\r\n"); 5 bwriter.write("escrever 2a linha\r\n"); 6 7 bwriter.flush(); //descarrego o buer 8 9 bwriter.write("escrever 3a linha\r\n"); 10 bwriter.write("escrever 4a linha\r\n"); 11 12 bwriter.close(); //nunca esquecer de fechar o arquivo 13 writer.close(); //nunca esquecer de fechar o arquivo

Leitura/Gravação Streamming Sumário 1 Conceitos Básicos 2 Leitura/Gravação de Texto 3 Leitura/Gravação Streamming 4 Leitura/Gravação Objetos

Leitura/Gravação Streamming Classe FileOutputStream Utilizada para escrita em arquivos binários Construtores public FileOutputStream(String name) public FileOutputStream(String name, boolean append) public FileOutputStream(File le) public FileOutputStream(File le, boolean append)

Leitura/Gravação Streamming Classe FileOutputStream 1 FileOutputStream fos = new FileOutputStream(new File("teste.bin")); 2 3 byte[] stream = new byte[]{'l','i','x','o'}; 4 fos.write(stream); //escreve vetor de bytes 5 6 fos.close();

Leitura/Gravação Streamming Classe FileInputStream Utilizada para leitura de arquivos binários Construtores public FileInputStream(String name) public FileInputStream(File le)

Leitura/Gravação Streamming Classe FileInputStream 1 FileInputStream fis = new FileInputStream(new File("teste.bin")); 2 3 byte[] stream = new byte[100]; 4 int tam = fis.read(stream); //retorna quantos bytes foram lidos 5 6 for(int i=0; i < tam; i++) { 7 System.out.print((char)stream[i]); 8 } 9 10 fis.close();

Leitura/Gravação Streamming Classe RandomAccessFile Classe que permite a leitura e escrita em um arquivo com acesso randômico Possui um le pointer que indica a posição atual para acessar o arquivo O le pointer pode ser obtido através do método getfilepointer() e alterado através do método seek()

Leitura/Gravação Streamming Classe RandomAccessFile 1 //Último parâmetro é o modo de abertura "r", "w", "rw", etc. 2 RandomAccessFile r = new RandomAccessFile(new File("teste.bin"), "r"); 3 4 int posini = 2; //posição inicial de leitura 5 r.seek(posini); //posiciona o ponteiro de leitura 6 7 //Retorna o número de bytes no arquivo 8 for (int i = 0; i < r.length() - posini; i++) { 9 char c = (char) r.readbyte(); 10 System.out.print(c); 11 } 12 13 r.close();

Leitura/Gravação Objetos Sumário 1 Conceitos Básicos 2 Leitura/Gravação de Texto 3 Leitura/Gravação Streamming 4 Leitura/Gravação Objetos

Leitura/Gravação Objetos Leitura/Gravação Objetos Java permite a gravação direta de objetos em disco ou seu envio através da rede Para isto, o objeto deve declarar implementar java.io.serializable

Leitura/Gravação Objetos Leitura/Gravação Objetos Um objeto é gravado usando o método writeobject() de ObjectOutputStream Um objeto é lido usando o método readobject() de ObjectInputStream Se uma classe serializada for alterada, um objeto gravado (serializado) com a versão antiga da classe não pode ser lido para essa nova versão não é possível recuperar arquivos gravados com a versão antiga

Leitura/Gravação Objetos Leitura/Gravação Objetos Escrita de objetos 1 File arquivo = new File("arquivo.objs"); 2 ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream( arquivo)); 3 Data d1 = new Data(1,1,2005); 4 Data d2 = new Data(1,1,2006); 5 out.writeobject(d1); 6 out.writeobject(d2); 7 out.close(); Leitura de objetos 1 File arquivo = new File("arquivo.objs"); 2 ObjectInputStream in = new ObjectInputStream(new FileInputStream( arquivo)); 3 Data d1 = (Data)in.readObject(); 4 Data d2 = (Data)in.readObject(); 5 in.close();

Leitura/Gravação Objetos Leitura/Gravação Arquivos Compactados Usando java.util.zip é possível armazenar dados de forma compactada, mantendo a estrutura dos arquivos e diretórios Maior eciência para E/S Usa-se a classe Zip, ZipEntry, ZipFile, ZipInputStream, etc.

Leitura/Gravação Objetos Leitura/Gravação Arquivos Compactados Leitura de arquivos compactados 1 ZipFile zip = new ZipFile("arquivo.zip"); 2 ZipEntry entry = zip.getentry("arquivo_interno.txt"); 3 BufferedReader in = new BufferedReader(new 4 InputStreamReader(zip.getInputStream(entry)); 5 6 //processa o arquivo para leitura 7 //... 8 9 zip.close(); Escrita de arquivos compactados 1 FileOutputStream dest = new FileOutputStream("arquivo.zip"); 2 ZipOutputStream zout = new ZipOutputStream(new 3 BufferedOutputStream(dest)); 4 5 6 ZipEntry entry = new ZipEntry("arquivo_interno.txt"); 7 zout.putnextentry(entry); 8 9 String conteudo =...; 10 zout.write(conteudo.getbytes(), 0, conteudo.length()); 11 zout.flush(); 12 zout.finish(); 13 zout.close();