Travailler avec les archives ZIP en Java : java.util.zip et Zip4j
La compression et l'archivage de données sont des tâches essentielles lors du développement d'applications en Java. Les archives ZIP sont largement utilisées pour empaqueter des fichiers, transférer des données sur le réseau et économiser de l'espace disque. Dans cet article, nous examinerons en détail deux approches principales pour travailler avec les archives ZIP en Java : le package intégré java.util.zip et la puissante bibliothèque tierce Zip4j.
Le package standard java.util.zip
Depuis JDK 1.1, Java propose le package java.util.zip, qui fournit des classes de base pour travailler avec le format ZIP. Les classes principales :
ZipOutputStream— pour créer des archives ZIPZipInputStream— pour lire des archives ZIPZipEntry— représente une entrée individuelle (fichier ou dossier) dans l'archiveZipFile— pour un accès aléatoire au contenu de l'archive
Création d'une archive ZIP avec 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("Archive créée : " + zipName); }}Extraction d'une archive 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("Extraction terminée dans le dossier : " + outputDir); }}Limitations de java.util.zip :
- Pas de support du chiffrement (protection par mot de passe)
- Prise en charge limitée d'Unicode dans les noms de fichiers (avant Java 7)
- Absence de support ZIP64 pour les archives > 4 Go (avant Java 8)
- Complexité de gestion des dossiers imbriqués
La bibliothèque Zip4j — fonctionnalités avancées
Zip4j est une bibliothèque tierce open source populaire qui résout la plupart des limitations du package standard. Pour l'ajouter, ajoutez la dépendance dans Maven :
<dependency> <groupId>net.lingala.zip4j</groupId> <artifactId>zip4j</artifactId> <version>2.11.5</version></dependency>Création d'une archive ZIP chiffrée avec Zip4j
import net.lingala.zip4j.ZipFile;import net.lingala.zip4j.model.ZipParam Aussi dans la bibliothèque
Bibliothèque WebSocket Kotlin : ktor-client-websockets pour le temps réel
Prost pour Rust : guide complet avec exemples
Traitement JSON en Rust : serde_json, simd-json, json5 et autres bibliothèques
Parsing HTML en Go (Golang) : bibliothèques et exemples de code