Compactando Arquivos em .zip : Java

Exemplo de implementação onde mostramos como compactar um arquivo em um .zip, somente com a API nativa do Java.

Este artigo pretende apresentar uma classe utilitária que “zippa” um arquivo existente.

Abaixo segue nossa classe CompactadorZip:

Listagem 1: Classe Compactador

import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class Compactador {        //Constantes    static final int TAMANHO_BUFFER = 4096; // 4kb        //método para compactar arquivo    public static void compactarParaZip(String arqSaida,String arqEntrada) throws IOException{        int cont;        byte[] dados = new byte[TAMANHO_BUFFER];                            BufferedInputStream origem = null;        FileInputStream streamDeEntrada = null;        FileOutputStream destino = null;        ZipOutputStream saida = null;        ZipEntry entry = null;                       try {             destino = new FileOutputStream(new File(arqSaida));             saida = new ZipOutputStream(new BufferedOutputStream(destino));             File file = new File(arqEntrada);             streamDeEntrada = new FileInputStream(file);             origem = new BufferedInputStream(streamDeEntrada, TAMANHO_BUFFER);             entry = new ZipEntry(file.getName());             saida.putNextEntry(entry);                                     while((cont = origem.read(dados, 0, TAMANHO_BUFFER)) != -1) {                 saida.write(dados, 0, cont);             }             origem.close();             saida.close();         } catch(IOException e) {             throw new IOException(e.getMessage());         }    } }

São passados como paramêtros para o método compactarParaZip duas strings, o caminho completo do arquivo de saída e também do arquivo de entrada. Nesta classe usamos: BufferedInputStream, FileInputStream, FileOutputStream, ZipOutputStream e ZipEntry.

Alguns conceitos:

O FileOutputStream é um fluxo de arquivo que permite a gravação em disco, já o FileInputStream é justamente o contrário, permitindo a leitura de um arquivo em disco.

ZipOutputStream e ZipEntry são usados para “zippar” o arquivo. Para maiores informações seguem os links da documentação:

Abaixo segue um exemplo de código para testarmos nossa implementação anterior:

Listagem 2: Utilizando a classe criada para compactar um arquivo

import java.io.IOException; public class Main {        public static void main(String args[]){        try {            Compactador.compactarParaZip("C:\\zipado.zip", "C:\\zipando.txt");        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    } }

Como pode se observar, essa implementação é bem simples. Com esse artigo esperamos atender a todos que precisarem “zippar” seus arquivos sem a necessidade de importar nenhum jar.

Artigos relacionados