Compactando arquivos com Java

Certo dia em algum sistema seu que gera arquivos o tempo (e que não pode parar de fazer isso!), você percebe que está ficando sem espaço no servidor, e não pode simplesmentes remover esses arquivos, é necessário que os arquivos permanecem por um bom tempo, tempo o suficiente para acabar com o espaço que você tem, ai sim, você começa a ter um problema.

Bom, pensando nisso comecei a estudar compactação de arquivos, e achei algumas coisas bem interessantes, abaixo está um exemplo de como compactar N arquivos de um diretório, fiz com Java pois estou estudando um pouco essa tecnologia, mas vou postar um exemplo em Dot Net também.

A explicação de como funciona está dentro do código, espero que seja útil à comunidade.

package br.com.ZipA;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.Deflater;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class Exemplo {
public static void main(String[] args) {

// vetor para guardar os arquivos que serão compactados
String[] arquivosEleitosParaCompactacao = new String[3];
arquivosEleitosParaCompactacao[0] = "C:\\Users\\o.casagrande\\Oscar\\estudo\\1.txt";
arquivosEleitosParaCompactacao[1] = "C:\\Users\\o.casagrande\\Oscar\\estudo\\2.txt";
arquivosEleitosParaCompactacao[2] = "C:\\Users\\o.casagrande\\Oscar\\estudo\\3.txt";

byte[] buffer = new byte[1024];

// caminho do arquivo compactado
String arquivoCompactado = "C:\\Users\\o.casagrande\\Oscar\\estudo\\ZipA.zip";

try {

// cria o arquivo zip
ZipOutputStream saidaDeStream = new ZipOutputStream(new FileOutputStream(arquivoCompactado));

// marca o modo de compreensão do arquivo
saidaDeStream.setLevel(Deflater.BEST_COMPRESSION);

// laço para pegar todos os arquivos que serao zipados
for (int i = 0; i < arquivosEleitosParaCompactacao.length; i++)
{
// carrega o arquivo em um stream
FileInputStream entradaDeStream = new FileInputStream(arquivosEleitosParaCompactacao[i]);

// cria uma entrada no zip para o arquivo
saidaDeStream.putNextEntry(new ZipEntry(arquivosEleitosParaCompactacao[i]));

// transfere os dados do arquivo para o zip
int tamanhoArquivo;
while ((tamanhoArquivo = entradaDeStream.read(buffer)) > 0)
{
saidaDeStream.write(buffer, 0, tamanhoArquivo);
}

// fecha a entrada do arquivo no zip
saidaDeStream.closeEntry();

// fecha o arquivo
entradaDeStream.close();
}

// fecha o arquivo zip
saidaDeStream.close();

} catch (Exception e) {

}
}
}
Anúncios

2 Respostas para “Compactando arquivos com Java

  1. Olá, Oscar!

    Sei que o post é antigo, mas vamos lá…
    Ótimo post. Só faltou um detalhe: saidaDeStream.finish();

    Se não chamar o método finish(), os arquivos não serão descompactados no futuro. Pelo menos, não com o ark (app do KDE).

    Fica a dica. Mais uma vez, ótimo post.

    Abraço.

    Curtir

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s