Trabalhando com arquivos ZIP em Java: guia completo
No desenvolvimento moderno em Java, frequentemente surge a necessidade de compactar e descompactar arquivos. ZIP é um dos formatos de compressão mais populares, suportado pela biblioteca padrão do Java. O pacote integrado java.util.zip fornece todas as ferramentas necessárias para trabalhar com arquivos ZIP sem instalar dependências de terceiros.
Principais classes do pacote java.util.zip
O pacote java.util.zip inclui várias classes essenciais para trabalhar com arquivos:
- ZipOutputStream — para criar arquivos ZIP e gravar arquivos neles
- ZipInputStream — para ler o conteúdo de arquivos ZIP
- ZipEntry — representa uma entrada individual (arquivo ou diretório) dentro do arquivo
- ZipFile — para acesso direto às entradas do arquivo pelo nome
- Deflater/Inflater — classes de baixo nível para compressão/descompressão de dados
Criação de um arquivo ZIP
Para criar um arquivo, utiliza-se ZipOutputStream. Cada arquivo adicionado é representado como um ZipEntry. Vejamos um exemplo que compacta vários arquivos em um único arquivo:
import java.io.*;import java.util.zip.*;
public class CreateZipExample { public static void main(String[] args) { // Array de arquivos para compactar String[] sourceFiles = {"file1.txt", "file2.txt", "image.png"}; String zipFileName = "archive.zip";
try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFileName))) { byte[] buffer = new byte[1024];
for (String filePath : sourceFiles) { File file = new File(filePath); // Cria uma entrada no arquivo ZipEntry zipEntry = new ZipEntry(file.getName()); zos.putNextEntry(zipEntry);
// Lê o arquivo e grava no arquivo try (FileInputStream fis = new FileInputStream(file)) { int length; while ((length = fis.read(buffer)) > 0) { zos.write(buffer, 0, length); } } zos.closeEntry(); } System.out.println("Arquivo criado: " + zipFileName); } catch (IOException e) { e.printStackTrace(); } }}Extração de um arquivo ZIP
Para ler o arquivo, utiliza-se ZipInputStream. O método getNextEntry() retorna sequencialmente todas as entradas do arquivo:
import java.io.*;import java.util.zip.*;
public class ExtractZipExample { public static void main(String[] args) { String zipFileName = "archive.zip"; String outputDir = "extracted_files";
new File(outputDir).mkdir();
try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFileName))) { 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 se necessário new File(newFile.getParent()).mkdirs();
try (FileOutputStream fos = new FileOutputStream(newFile)) { int length; while ((length = zis.read(buffer)) > 0) { fos.write(buffer, 0, length); } } zis.closeEntry(); System.out.println("Extraído: " + fileName); } } catch (IOException e) { e.printStackTrace(); } }}Trabalhando com ZipFile para acesso aleatório
\Também na biblioteca
Trabalhando com Excel em Rust: bibliotecas e exemplos de código
ORM para PHP: comparação entre Doctrine, Eloquent e Cycle — exemplos de código
Agendador de Tarefas Java: Quartz Scheduler – Guia Completo