1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
/**
* Methode permettant de decompresser le contenu d'un fichier zip dans un repertoire.
* @param zipFile Le fichier Zip.
* @param destDir Le dossier de destination.
* @throws IOException En cas d'erreur d'E/S
*/
public static void unzip(File zipFile, File destDir) throws IOException {
//Verification des arguments
if(!zipFile.exists() || zipFile.isDirectory() || !zipFile.canRead()){
throw new IllegalArgumentException("first argument must be an existing readable file.");
}
if(!destDir.exists() || !destDir.isDirectory() || !destDir.canWrite()){
throw new IllegalArgumentException("second argument must be an existing writable directory.");
}
//Decompression
BufferedOutputStream dest = null;//Flux de destination
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(zipFile)));//Flux de lecture
ZipEntry entry;
while((entry = zis.getNextEntry()) != null){//On parcours les entrees du zip
if(entry.isDirectory()){//Si l'entree est un repertoire, on le cree
File newRep = new File(destDir.getAbsolutePath() + File.separator + entry.getName());
newRep.mkdirs();
} else{//Sinon on decompresse l'entree
int taille = 1024;
int compteur;
byte[] tampon = new byte[taille];
dest = new BufferedOutputStream(new FileOutputStream(destDir.getAbsolutePath() + File.separator + entry.getName()));
while((compteur = zis.read(tampon, 0, taille)) != -1){
dest.write(tampon, 0, compteur);
}
dest.flush();//Ecriture
dest.close();//Fermeture du flux d'ecriture
}
}
//Fermeture du flux de lecture
zis.close();
} |