Travailler avec les archives ZIP en Java : guide complet de java.util.zip

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 : guide complet de java.util.zip



L'archivage de données est l'une des tâches fondamentales du développement logiciel. Java fournit une boîte à outils puissante et flexible pour travailler avec les archives ZIP "prêtes à l'emploi" — le package java.util.zip. Dans cet article, nous allons détailler comment créer, extraire et modifier des archives ZIP en utilisant les outils standard de Java.



Classes principales du package java.util.zip

Le package java.util.zip contient les classes clés pour travailler avec les archives :

  • ZipOutputStream — pour créer des archives ZIP (écriture de fichiers dans l'archive)
  • ZipInputStream — pour lire et extraire des archives ZIP
  • ZipEntry — représente une entrée individuelle (fichier/répertoire) dans l'archive
  • ZipFile — pour un accès direct au contenu de l'archive sans extraction complète
  • CheckedOutputStream / CheckedInputStream — pour vérifier l'intégrité des données (CRC32, Adler32)


Création d'une archive ZIP (ZipOutputStream)

Pour créer une archive, on utilise ZipOutputStream, qui encapsule un FileOutputStream standard. Chaque fichier ajouté est représenté par un objet 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);

// Créer une entrée dans l'archive ZipEntry zipEntry = new ZipEntry(file.getName()); zos.putNextEntry(zipEntry);

// Écrire le contenu du fichier int length; while ((length = fis.read(buffer)) > 0) { zos.write(buffer, 0, length); } zos.closeEntry(); fis.close(); System.out.println("Ajouté : " + file.getName()); } } System.out.println("Archive créée : " + zipName); }}


Points importants lors de la création d'une archive :

  • Appelez toujours putNextEntry() avant d'écrire des données et closeEntry() après
  • Pour ajouter un répertoire vide, utilisez ZipEntry(name + "/") — le nom doit se terminer par "/"
  • Utilisez try-with-resources pour fermer automatiquement les flux


Extraction d'une archive ZIP (ZipInputStream)

Pour extraire des fichiers d'une archive, on utilise ZipInputStream. La lecture se fait séquentiellement — entrée par entrée.



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);

// Créer les répertoires parents new File(newFile.getParent()).mkdirs();

// Écrire le fichier FileOutputStream fos = new FileOutputStream(newFile); int length;

Recommendations