descompactando arquivos em java

3
Descompactando arquivos .ZIP com o Java 01 de setembro de 2003 por Christiano Pinheiro Olá, pessoal. Desculpem-me pela demora na coluna mas tive alguns problemas de saúde e no trabalho que me impossibilitaram de finalizar a tempo a mesma. No artigo desta semana veremos como descompactar um arquivo ZIP. O pacote java.util.zip package contém várias classes que facilitam a manipulação de arquivos compactados. É nele que trabalharemos no artigo desta semana. Let’s rock! A classe ZipFile A classe ZipFile fornece um modo de ler o conteúdo de um arquivo ZIP. Existem dois construtores: um que recebe a String especificando o nome do arquivo a ser aberto e outro que recebe um objeto do tipo java.io.File. A classe ZipEntry Cada arquivo contido no arquivo ZIP pode ser representado por um objeto do tipo ZipEntry. Estes objetos podem ser obtidos de um arquivo existente através de um objeto do tipo ZipFile ou ZipIputStream. Eles podem também ser criados quando fazemos um novo arquivo ZIP através do ZipOutputStream. A Classe ZipEntry fornece métodos para obter informações sobre cada entrada de arquivo no ZIP, como o método isDirectory(), que determina se a entrada é de um arquivo normal ou diretório. A classe ZipInputStream A classe ZipInputStream lê dados no formato ZIP de uma InputStream. O método getNextEntry() retorna um ZipEntry para o próximo item no arquivo ZIP e posiciona a stream no início dos dados para o componente.

Upload: leo-viana

Post on 27-Dec-2015

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Descompactando Arquivos Em Java

Descompactando arquivos .ZIP com o Java01 de setembro de 2003 por Christiano Pinheiro

Olá, pessoal.

Desculpem-me pela demora na coluna mas tive alguns

problemas de saúde e no trabalho que me impossibilitaram de finalizar

a tempo a mesma. No artigo desta semana veremos como descompactar

um arquivo ZIP.

O pacote java.util.zip package contém várias classes

que facilitam a manipulação de arquivos compactados. É nele que

trabalharemos no artigo desta semana. Let’s rock!

A classe ZipFile

A classe ZipFile fornece um modo de ler o conteúdo

de um arquivo ZIP. Existem dois construtores: um que recebe a

String especificando o nome do arquivo a ser aberto e outro que

recebe um objeto do tipo java.io.File.

A classe ZipEntry

Cada arquivo contido no arquivo ZIP pode ser representado

por um objeto do tipo ZipEntry. Estes objetos podem ser obtidos

de um arquivo existente através de um objeto do tipo ZipFile ou

ZipIputStream. Eles podem também ser criados quando fazemos um

novo arquivo ZIP através do ZipOutputStream.

A Classe ZipEntry fornece métodos para obter informações

sobre cada entrada de arquivo no ZIP, como o método isDirectory(),

que determina se a entrada é de um arquivo normal ou diretório.

A classe ZipInputStream

A classe ZipInputStream lê dados no formato ZIP

de uma InputStream.

O método getNextEntry() retorna um ZipEntry para

o próximo item no arquivo ZIP e posiciona a stream no início dos

dados para o componente.

O método closeEntry() fecha o item corrente e segue

para o próximo item do arquivo.

Page 2: Descompactando Arquivos Em Java

Ambos os métodos geram uma exceção do tipo ZipException

caso ocorra alguma relacionada com operações de ZIP no arquivo.

A classe ZipOutputStream

A classe ZipOutputStream fornece uma OuputStream

para gerarmos dados comprimidos.

O método putNextEntry() recebe um ZipEntry como

parâmetro para criação de uma nova entrada no arquivo ZIP.

Para especificar o tipo de compressão utilizada,

existem dois métodos:

.

setMethod() – recebe um parâmetro do

tipo ZipOutputStream.DEFLATED(para especificar que deverá haver

compressão) ou ZipOutputStream.STORED(não haverá compressão)

. setLevel()

– recebe um parâmetro do tipo int (0a 9) especificando o nível

de compressão

Vejamos agora como descompactar o arquivo ZIP de

modo completo, criando diretórios e tudo mais.

Note que no exemplo a seguir criamos um método chamado copyInputStream()

que será o responsável por gravar a InputStream referente ao item

do arquivo ZIP.

Ex.:

import java.io.*;import java.util.*;import java.util.zip.*;

public class Unzip {

public static final void copyInputStream(InputStream in, OutputStream out) throws IOException { byte[] buffer = new byte[1024]; int len; while((len = in.read(buffer)) >= 0) out.write(buffer, 0, len); in.close(); out.close(); }

public static final void main(String[] args) {

Page 3: Descompactando Arquivos Em Java

Enumeration entries; ZipFile zipFile;

if(args.length != 1) { System.err.println("Sintaxe do programa: Unzip arquivo"); return; } try { zipFile = new ZipFile(args[0]); entries = zipFile.entries(); while(entries.hasMoreElements()) { ZipEntry entry = (ZipEntry)entries.nextElement(); if(entry.isDirectory()) { System.err.println("Descompactando diretório: " + entry.getName()); (new File(entry.getName())).mkdir(); continue; } System.out.println("Descompactando arquivo:" + entry.getName()); copyInputStream(zipFile.getInputStream(entry), new BufferedOutputStream(new FileOutputStream(entry.getName()))); } zipFile.close(); } catch (IOException ioe) { System.err.println("Erro ao descompactar:" + ioe.getMessage()); return; } }}

Um abraço e até a próxima!