Trabalho com ZIP/arquivos em Java: java.util.zip e Zip4j
Compressão e arquivamento de dados são tarefas essenciais no desenvolvimento de aplicações em Java. Arquivos ZIP são amplamente utilizados para empacotar arquivos, transferir dados pela rede e economizar espaço em disco. Neste artigo, abordaremos detalhadamente duas abordagens principais para trabalhar com arquivos ZIP em Java: o pacote integrado java.util.zip e a poderosa biblioteca de terceiros Zip4j.
Pacote padrão java.util.zip
Desde o JDK 1.1, o Java disponibiliza o pacote java.util.zip, que fornece classes básicas para trabalhar com o formato ZIP. As principais classes são:
ZipOutputStream— para criar arquivos ZIPZipInputStream— para ler arquivos ZIPZipEntry— representa uma entrada individual (arquivo ou pasta) dentro do arquivoZipFile— para acesso aleatório ao conteúdo do arquivo
Criação de arquivo ZIP com java.util.zip
import java.io.*;import java.util.zip.*;
public class ZipCreator { public static void main(String[] args) throws IOException { String sourceFile = "document.txt"; String zipName = "archive.zip";
try (FileOutputStream fos = new FileOutputStream(zipName); ZipOutputStream zos = new ZipOutputStream(fos)) {
File fileToZip = new File(sourceFile); FileInputStream fis = new FileInputStream(fileToZip);
ZipEntry zipEntry = new ZipEntry(fileToZip.getName()); zos.putNextEntry(zipEntry);
byte[] buffer = new byte[1024]; int length; while ((length = fis.read(buffer)) >= 0) { zos.write(buffer, 0, length); } zos.closeEntry(); fis.close(); } System.out.println("Arquivo criado: " + zipName); }}Extração de arquivo ZIP
import java.io.*;import java.util.zip.*;
public class ZipExtractor { public static void main(String[] args) throws IOException { String zipFile = "archive.zip"; String outputDir = "extracted";
new File(outputDir).mkdirs();
try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile))) { ZipEntry entry; while ((entry = zis.getNextEntry()) != null) { File newFile = new File(outputDir, entry.getName()); new File(newFile.getParent()).mkdirs();
FileOutputStream fos = new FileOutputStream(newFile); byte[] buffer = new byte[1024]; int len; while ((len = zis.read(buffer)) > 0) { fos.write(buffer, 0, len); } fos.close(); zis.closeEntry(); } } System.out.println("Extração concluída na pasta: " + outputDir); }}Limitações do java.util.zip:
- Sem suporte a criptografia (proteção por senha)
- Trabalho limitado com Unicode em nomes de arquivos (antes do Java 7)
- Sem suporte a ZIP64 para arquivos > 4 GB (antes do Java 8)
- Dificuldade em trabalhar com subpastas
Biblioteca Zip4j — recursos avançados
Zip4j é uma popular biblioteca de código aberto de terceiros que resolve a maioria das limitações do pacote padrão. Para utilizá-la, adicione a dependência no Maven:
<dependency> <groupId>net.lingala.zip4j</groupId> <artifactId>zip4j</artifactId> <version>2.11.5</version></dependency>Criação de arquivo ZIP criptografado com Zip4j
import net.lingala.zip4j.ZipFile;import net.lingala.zip4j.model.ZipParam Também na biblioteca
Trabalho com XML em Kotlin: bibliotecas, parsing e criação de documentos
iTextSharp para C# (.NET): guia completo com exemplos
cereal para C++: guia completo com exemplos
Internacionalização (i18n) em PHP: Guia Completo com Exemplos
Cliente OAuth para Node.js: implementação de autorização via Google e GitHub