Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionimport java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class testZipRecursif { static final int BUFFER = 2048; /** * Zip un répertoire en modifiant le niveau de compression * @param args */ public static void main(String[] args) { //Declaration du repertoire à zipper (linux version) //String REP_A_ZIPPER = "//var//testZip//AZipper//"; //Declaration du repertoire à zipper (windows version) String REP_A_ZIPPER = "\\var\\testZip\\AZipper\"; //Declaration du fichier final (linux version) //String ZIP_FILE = "//var//testZip//myfigsLevel.zip"; //Declaration du fichier final (windows version) String ZIP_FILE = "\\var\\testZip\\myfigsLevel.zip"; //Declaration du niveau de compression int zipLevel = 0; //Zip recursif d'un repertoire zipRepertoire(REP_A_ZIPPER, ZIP_FILE, zipLevel); } /** * Zip recursivement le contenu d'un repertoire * @param REP_A_ZIPPER Le repertoire en entree * @param ZIP_FILE Le fichier de sortie * @param zipLevel Le niveau de compression */ private static void zipRepertoire(String REP_A_ZIPPER, String ZIP_FILE, int zipLevel){ try { //Creation du fichier final FileOutputStream dest = new FileOutputStream(ZIP_FILE); ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest)); //On definit le niveau de compression out.setLevel(zipLevel); //On zip recursivement le contenu d'un repertoire //Ainsi que de ses sous repertoires ZipRecusive(out, REP_A_ZIPPER, ""); out.close(); } catch(IOException e) { e.printStackTrace(); } } /** * Permet de traiter recursivement le contenu d'un repertoire * @param out Le flux zip de sortie * @param REP_A_ZIPPER Le repertoire de base à zipper * @param RecursivePath Le sous repertoire que l'on traite */ private static void ZipRecusive(ZipOutputStream out, String REP_A_ZIPPER, String RecursivePath){ byte data[] = new byte[BUFFER]; //Creatin de la liste des fichiers present dans un repertoire File f = new File(REP_A_ZIPPER+RecursivePath); String files[] = f.list(); BufferedInputStream origin = null; ArrayList listDirectory = new ArrayList(); try{ //On parcourt la liste des fichiers du repertoire for (int i=0; i<files.length; i++) { //On recupere le nom du fichier String fileName = files[i]; //On reconstruit le chemin complet du fichier String pathAndFile = REP_A_ZIPPER+RecursivePath+fileName; //On cherche a savoir si il s'agit un repertoir ou d'un fichier File fileTmp = new File(pathAndFile); //Si il s'agit d'un repertoire, //on l'ajoute dans une liste de repertoire à traiter if (fileTmp.isDirectory()){ listDirectory.add(fileName); } else { //Traitement du fichier courant FileInputStream fi = new FileInputStream(pathAndFile); origin = new BufferedInputStream(fi, BUFFER); //Debut du zipage du fichier courant ZipEntry entry = new ZipEntry(RecursivePath+fileName); out.putNextEntry(entry); int count; while((count = origin.read(data, 0, BUFFER)) != -1) { out.write(data, 0, count); } origin.close(); } } //Parcours de la liste des répertoires present dans le repertoire courant String[] directoriesName = convertArrayListToStringTab(listDirectory); for (int i=0; i<directoriesName.length; i++) { String directory = directoriesName[i]; ZipRecusive(out, REP_A_ZIPPER, directory+"\"); } } catch(IOException e) { e.printStackTrace(); } } /** * Convertir un ArrayList en String[] * @return un tableau de chaine de caractère */ private static String[] convertArrayListToStringTab(ArrayList list){ String[] res = new String[list.size()]; for (int i=0; i<list.size(); i++){ res[i] = list.get(i).toString(); } return res; } }