Trabalho com Arquivos ZIP em Java: guia completo sobre java.util.zip

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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 e closeEntry() 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;

Recommendations