Zip_fic -- archivage au format zip d'un répertoire

Description

Un petit bout de code permettant de créer une archive ZIP à partir de fichiers présents dans un répertoire.
Paramètres du programme:
// . 1 . le repertoire ou se trouve les fichiers REP_FIC= obligatoire
// . 2 . le repertoire d'ecriture du zip REP_ZIP=
// . 3 . le nom du fichier zip NOM_ZIP=
// . 4 . extension des fichiers a zipper FIC_OKE=
// . 5 . extension des fichiers a ne pas zipper FIC_KOE=
// . 6 . Zip des fichiers dans les sous repertoires SUB_FLD=(Y defaut, N)
// . 7 . Suppressions des fichiers zippés DEL_FIC=(N defaut, Y)

Exemple d'execution en ligne de commande:
zip_fic REP_FIC=C:\tmp\01009\ REP_ZIP=C:\temp\ NOM_ZIP=01009.zip SUB_FLD=N DEL_FIC=y FIC_KOE=log01009.tlg

Source / Exemple :


//=======================================================================
// zip_fic.java 
//============================== Objet ==================================
// Permet de créer une archive zip avec des fichiers contenu dans un 
// répertoire donné 
//============================== Parametres =============================
// . 1 . le repertoire ou se trouve les fichiers    REP_FIC=  obligatoire
// . 2 . le repertoire d'ecriture du zip            REP_ZIP=  
// . 3 . le nom du fichier zip                      NOM_ZIP=   
// . 4 . extension des fichiers a zipper            FIC_OKE=  
// . 5 . extension des fichiers a ne pas zipper     FIC_KOE=  
// . 6 . Zip des fichiers dans les sous repertoires SUB_FLD=(Y defaut, N) 
// . 7 . Suppressions des fichiers zippés           DEL_FIC=(N defaut, Y) 
//=============================== Commentaires ==========================
// Seul le premier paramètre est obligatoire
// L'ordre des paramètres n'a aucune importance
// Les parametres FIC_OKE et FIC_KOE peuvent être une liste d'éléments 
// séparés par ":" Les éléments peuvent être des extensions de fichiers
// ou des nom de fichiers complets
//=======================================================================
//  03/07/2008 -- strs -- creation    
//=======================================================================

import java.io.*;
import java.util.zip.*;

public class zip_fic {
  
  static final int BUFFER = 2048;
 
  public zip_fic(String pathSource, 
		         String PathDestination, 
		         String nomFichier, 
		         String pattern_ok, 
		         String pattern_ko,
		         boolean find_lfd,
		         boolean delete_file) {
    try {
      FileOutputStream dest = new FileOutputStream(PathDestination + nomFichier);
      ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest));
      add(pathSource, "", pattern_ok, pattern_ko, out, find_lfd,delete_file);
      out.close();
    }
    catch (Exception e) {
      System.out.println(e.getMessage());
    }
  }

  private void add(String pathSource, String path, String extension_ok, String extension_ko, ZipOutputStream out, boolean bln_sub_fld, boolean supress_fic) {
	  
    File f = new File(pathSource + path);
  
    File files[] = f.listFiles();

    BufferedInputStream origin = null;

    byte data[] = new byte[BUFFER];

    try {
      for (int i = 0; i < files.length; i++) {
        //System.out.println("Adding: "+files[i]);
        if (files[i].isDirectory()) {
          //System.out.println("Adding: " + files[i].getName());
          if (bln_sub_fld) {
            add(pathSource, path + files[i].getName() + "/", extension_ok,extension_ko, out, bln_sub_fld, supress_fic);
          }
        }
        else {
        	boolean bln_archive = false;
        	// On vérifie que le fichier doit être archivé
        	String extension;
        	if ( extension_ok.equals("*")) { bln_archive=true;}
            java.util.StringTokenizer tokenizer = new java.util.StringTokenizer(extension_ok, ":");
            while ( tokenizer.hasMoreTokens() && !bln_archive) {
            	extension=tokenizer.nextToken();
            	//System.out.println("1 -- extension=" + extension + " -> " + files[i].getName());
                if (files[i].getName().endsWith(extension)) { bln_archive=true;}                
            }
        	// Dans le cas ou on prend tous les fichiers (extension_ok="*") on vérifie qu'il n'est pas exclu 
            if ( bln_archive ) {
            	tokenizer = new java.util.StringTokenizer(extension_ko, ":");
                while ( tokenizer.hasMoreTokens() && bln_archive) {
                	extension=tokenizer.nextToken();
                	//System.out.println("2 -- extension=" + extension );
                    if (files[i].getName().endsWith(extension)) { bln_archive=false; }                
                }           	
            }

          if (  bln_archive ) {
        	System.out.println("AJOUT:: " + pathSource + path + files[i].getName());
            FileInputStream fi = new FileInputStream(pathSource + path + files[i].getName());
            origin = new BufferedInputStream(fi, BUFFER);
            ZipEntry entry = new ZipEntry(path + files[i].getName());
            out.putNextEntry(entry);
            int count;
            while ( (count = origin.read(data, 0, BUFFER)) != -1) {
              out.write(data, 0, count);
            }
            origin.close();
            if (supress_fic) { files[i].delete(); }
          }
        }
      }
    }
    catch (Exception e) {
      e.printStackTrace();
    }

  }

  public static void main(String[] args) {
  ///////////////////////////////////////////////////////////
  //    Lecture et contrôle des paramètres
  ///////////////////////////////////////////////////////////
  String rep_fic="";
  String rep_zip="";
  String nom_zip_dft="";
  String nom_zip="";
  String ext_fic_ok="";
  String ext_fic_ko="";
  String sub_fld="";
  String del_fic="";
  
  boolean bln_sub_fld =true;
  boolean bln_sup_fic =false;
  
  //System.out.println("AGUMENTS ::: " + args.length);
  for (int i=0; i<args.length; i++) 
  {    
	 //System.out.println(i +"  " +args[i]);      
     if ( args[i].substring(0,8).equals("REP_FIC=") )
     { rep_fic= args[i].substring(8); }
     if ( args[i].substring(0,8).equals("REP_ZIP=") )
     { rep_zip= args[i].substring(8); }
     if ( args[i].substring(0,8).equals("NOM_ZIP=") )
     { nom_zip= args[i].substring(8); }    
     if ( args[i].substring(0,8).equals("SUB_FLD=") )
     { sub_fld = args[i].substring(8); }
     if ( args[i].substring(0,8).equals("FIC_OKE=") )
     { ext_fic_ok= args[i].substring(8); }
     if ( args[i].substring(0,8).equals("FIC_KOE=") )
     { ext_fic_ko= args[i].substring(8); }
     if ( args[i].substring(0,8).equals("DEL_FIC=") )
     { del_fic= args[i].substring(8); }
   }

  
   //Le répertoire de recherche est obligatoire
   if ((rep_fic.equals("")) || (rep_fic==null)) {
        System.out.println("zip_pck  REP_FIC=<repertoire> REP_ZIP=<>  NOM_ZIP=<> FIC_OKE=<rlv:RLV:> FIC_KOE=<zip:olb:> SUB_FLD=<y,n> DEL_FIC=<y,n>");
        System.out.println("le parametre REP_FIC=<repertoire> est obligatoire");
        System.exit(1);
     }
   //On test le répertoire
   File dir = new File(rep_fic);
   String[] repertoire = dir.list();
   if (repertoire == null) {
       System.out.println(rep_fic + ":: ce répertoire n'existe pas ou n'est pas un répertoire");
       System.exit(1);
   }  else {
	   nom_zip_dft=dir.getName()+".zip";
   }
     
    //Si le répertoire de destination du zip n'existe pas on le créé dans le répertoire
    //ou l'on zip les fichiers
    if ((rep_zip.equals("")) || (rep_zip==null)) { rep_zip=rep_fic; }

    //Si le nom de l'archive zip n'existe pas on prends le nom du répertoire de zip
    if ((nom_zip.equals("")) || (nom_zip==null)) { nom_zip=nom_zip_dft; }

    ext_fic_ko="ZIP:zip:"+ext_fic_ko;
    
    if ((ext_fic_ok.equals("")) || (ext_fic_ok==null)) { ext_fic_ok="*"; }
   
   	
   	if ( (del_fic.equalsIgnoreCase("Y")) || (del_fic.equalsIgnoreCase("O")) ) 
     	{  bln_sup_fic = true;}
   	else
   	    {  bln_sub_fld = false;}
   	
   	if ( (sub_fld.equals("")) || (sub_fld==null) ||
      		 (sub_fld.equalsIgnoreCase("Y")) || (sub_fld.equalsIgnoreCase("O"))) 
      	{  bln_sub_fld = true; }
      	else 
      	{  bln_sub_fld = false;}
   	
   	System.out.println("Constitution de " + rep_zip+ nom_zip);	
    new zip_fic( rep_fic, rep_zip, nom_zip, ext_fic_ok, ext_fic_ko, bln_sub_fld, bln_sup_fic);
  }

}

Conclusion :


Rien de bien novateur... mais un exemple supplémentaire qui j'espère aidera d'autres débutants. Les codes que j'ai en tout cas sur ce site m'ont beaucoup aidés! Merci à tous les contributeurs!!!

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.