Trabalho com Arquivos ZIP em Java: guia completo sobre java.util.zip
O arquivamento de dados é uma das tarefas básicas no desenvolvimento de software. O Java fornece um conjunto de ferramentas poderoso e flexível para trabalhar com arquivos ZIP "prontos para uso" — o pacote java.util.zip. Neste artigo, abordaremos em detalhes como criar, extrair e modificar arquivos ZIP usando os recursos padrão do Java.
Principais classes do pacote java.util.zip
O pacote java.util.zip contém as principais classes para trabalhar com arquivos:
- ZipOutputStream — para criar arquivos ZIP (gravar arquivos no arquivo)
- ZipInputStream — para ler e extrair arquivos ZIP
- ZipEntry — representa uma entrada individual (arquivo/diretório) dentro do arquivo
- ZipFile — para acesso direto ao conteúdo do arquivo sem extração completa
- CheckedOutputStream / CheckedInputStream — para verificar a integridade dos dados (CRC32, Adler32)
Criação de arquivo ZIP (ZipOutputStream)
Para criar um arquivo, usa-se ZipOutputStream, que encapsula um FileOutputStream comum. Cada arquivo adicionado é representado por um objeto ZipEntry.
import java.io.*;import java.util.zip.*;
public class CreateZip { public static void main(String[] args) throws IOException { String[] sourceFiles = {"file1.txt", "file2.txt", "image.png"}; String zipName = "archive.zip";
try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipName))) { byte[] buffer = new byte[1024];
for (String filePath : sourceFiles) { File file = new File(filePath); FileInputStream fis = new FileInputStream(file);
// Cria uma entrada no arquivo ZipEntry zipEntry = new ZipEntry(file.getName()); zos.putNextEntry(zipEntry);
// Grava o conteúdo do arquivo int length; while ((length = fis.read(buffer)) > 0) { zos.write(buffer, 0, length); } zos.closeEntry(); fis.close(); System.out.println("Adicionado: " + file.getName()); } } System.out.println("Arquivo criado: " + zipName); }}Pontos importantes ao criar um arquivo:
- Sempre chame
putNextEntry()antes de gravar dados ecloseEntry()depois - Para adicionar um diretório vazio, use
ZipEntry(name + "/")— o nome deve terminar com "/" - Use try-with-resources para fechar automaticamente os fluxos
Extração de arquivo ZIP (ZipInputStream)
Para extrair arquivos de um arquivo, usa-se ZipInputStream. A leitura ocorre sequencialmente — entrada por entrada.
import java.io.*;import java.util.zip.*;
public class ExtractZip { public static void main(String[] args) throws IOException { String zipFile = "archive.zip"; String outputDir = "extracted";
File dir = new File(outputDir); if (!dir.exists()) dir.mkdirs();
try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile))) { ZipEntry entry; byte[] buffer = new byte[1024];
while ((entry = zis.getNextEntry()) != null) { String fileName = entry.getName(); File newFile = new File(outputDir + File.separator + fileName);
// Cria diretórios pais new File(newFile.getParent()).mkdirs();
// Grava o arquivo FileOutputStream fos = new FileOutputStream(newFile); int length; Também na biblioteca
bcrypt em Go: guia completo com exemplos práticos
SDK OpenAI para JavaScript (Node.js): guia completo com exemplos
Event Bus e padrão Observer em PHP: implementação e exemplos
CryptoKit para Swift: guia completo com exemplos