J'ai donc dans un premier temps cherché du côté de l'api standard Java (http://docs.oracle.com/javase/6/docs/api/java/util/zip/package-summary.html).
Le problème, c'est qu'il n'y a rien d'automatique.
Heureusement pour moi, MkYong (http://www.mkyong.com) s'est déjà penché sur la question.
Si vous ne connaissez pas ce site, je vous le conseil, régulièrement ses publications sont forts utiles.
J'ai apporté le support des répertoires dans le zip pour les créer autmatiquement et corrigé une erreur.
/** * */ package org.util.zip ; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; /** * @author MkYong & MARTINEAU Emeric * http://www.mkyong.com/java/how-to-decompress-files-from-a-zip-file/ * */ public class UnZip { /** * Unzip it * * @param zipFile * input zip file * @param output * zip file output folder */ public void unZipIt(String zipFile, String outputFolder) { try { // create output directory is not exists File folder = new File(outputFolder) ; if (!folder.exists()) { folder.mkdir() ; } // get the zip file content ZipInputStream zis = new ZipInputStream( new FileInputStream(zipFile)) ; // get the zipped file list entry ZipEntry ze = zis.getNextEntry() ; String fileName ; while (ze != null) { fileName = ze.getName() ; if (ze.isDirectory()) { System.out.println("Creating directory : ".concat(fileName)) ; new File(outputFolder + File.separator + fileName).mkdirs() ; } else { extractFile(outputFolder, zis, fileName) ; } zis.closeEntry(); ze = zis.getNextEntry() ; } zis.close(); System.out.println("Done"); } catch (IOException ex) { ex.printStackTrace(); } } private void extractFile(final String outputFolder, final ZipInputStream zis, final String fileName) throws IOException { final byte[] buffer = new byte[1024] ; final File newFile = new File(outputFolder + File.separator + fileName); System.out.println("file unzip : " + newFile.getAbsoluteFile()); // create all non exists folders // else you will hit FileNotFoundException for compressed folder new File(newFile.getParent()).mkdirs(); final FileOutputStream fos = new FileOutputStream(newFile); int len; while ((len = zis.read(buffer)) > 0) { fos.write(buffer, 0, len); } fos.close(); } }Un problème étrange toutefois se produit. Si vous créer un fichier zip avec 7Zip il arrive qu'il y ai un problème de CRC
Un autre exemple de qualité : http://www.java-forums.org/blogs/java-io/973-how-work-zip-files-java.html
Aucun commentaire:
Enregistrer un commentaire