La librairie java.util.zip fournit un moyen de compression en format Zip en deux étapes:
Lire le fichier avec FileInputStream.
Ajouter le nom du fichier à ZipEntry et le sauvegarder en sortie avec ZipOutputStream.
Le programme suivant lit le fichier "c:\\FIchier0410.log" et le compresse dans "c:\\monFichier.zip".
Lire le fichier avec FileInputStream.
Ajouter le nom du fichier à ZipEntry et le sauvegarder en sortie avec ZipOutputStream.
Le programme suivant lit le fichier "c:\\FIchier0410.log" et le compresse dans "c:\\monFichier.zip".
package com.codeurjava.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class zipFile { public static void main(String[] args) { final int BUFFER = 2048; try{ byte buffer[] = new byte[BUFFER]; FileOutputStream fileos = new FileOutputStream("C:\\monFichier.zip"); ZipOutputStream zipos = new ZipOutputStream(fileos); ZipEntry zipentry= new ZipEntry("c:\\Fichier0410.log"); zipos.putNextEntry(zipentry); FileInputStream in = new FileInputStream("c:\\Fichier0410.log"); int lec; while ((lec = in.read(buffer)) > 0) { zipos.write(buffer, 0, lec); } in.close(); zipos.closeEntry(); zipos.close(); System.out.println("Fichier compressé créé!"); }catch(IOException ex){ ex.printStackTrace(); } } }Exécution:
Fichier compressé créé!
Compresser plusieurs fichier d'un dossier récursivement
Lire tous les fichiers et les sous dossiers de "c:\\test" et les compresser dans "c:\\monFichier.zip". Ce programme compresse récursivement les répertoires.
package com.codeurjava.File; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class zipFile { final static String dossier_src = "c:\\test"; final static String fichier_zip_desc = "monFichier.zip"; static List<String>liste; public static void main(String[] args) { final int BUFFER = 2048; File node = new File(dossier_src); liste = new ArrayList (); listeFichiers(node); try{ byte buffer[] = new byte[BUFFER]; FileOutputStream fileos = new FileOutputStream(fichier_zip_desc); ZipOutputStream zipos = new ZipOutputStream(fileos); for(String file : liste){ ZipEntry zipentry= new ZipEntry(file); zipos.putNextEntry(zipentry); FileInputStream in = new FileInputStream(dossier_src + File.separator + file); int lec; while ((lec = in.read(buffer)) > 0) { zipos.write(buffer, 0, lec); } in.close(); System.out.println("Fichier "+file+" ajouté"); } zipos.closeEntry(); zipos.close(); System.out.println("Fichier compressé créé!"); }catch(IOException ex){ ex.printStackTrace(); } } public static List listeFichiers(File node){ //ajouter les fichiers if(node.isFile()){ String file = node.getAbsoluteFile().toString(); String chemin = file.substring(dossier_src.length()+1, file.length()); liste.add(chemin); } if(node.isDirectory()){ String[] sousFichier = node.list(); for(String filename : sousFichier){ listeFichiers(new File(node, filename)); } } return liste; } }
Exécution:
Fichier img_01.jpg ajouté Fichier pdf\java.pdf ajouté Fichier table.sql ajouté Fichier word\cours java.docx ajouté Fichier compressé créé!
Ressources: