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:
- BufferedInputStream: usado para armazenar dados de um fluxo de entrada;
- FileInputStream: usado para ler arquivos.
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.