Trabalho com ZIP/arquivos em Java: java.util.zip e Zip4j

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 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 ZIP
  • ZipInputStream — para ler arquivos ZIP
  • ZipEntry — representa uma entrada individual (arquivo ou pasta) dentro do arquivo
  • ZipFile — 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                    

Recommendations