Travailler avec les archives ZIP en Java : java.util.zip et Zip4j

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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 ZIP
  • ZipInputStream — pour lire des archives ZIP
  • ZipEntry — représente une entrée individuelle (fichier ou dossier) dans l'archive
  • ZipFile — 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                    

Recommendations