IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

faire un fichier Zip


Sujet :

Collection et Stream Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 11
    Points : 8
    Points
    8
    Par défaut faire un fichier Zip
    Bonjour,

    J'essaie de faire un fichier zip avec l'API zip de java.

    J'ai un truc du genre pour tester :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    import java.io.*;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    import java.util.zip.*;
     
    public class Zip {
       static final int BUFFER = 2048;
       public String logPath; 
       public String archivePathAndName;
     
       public Zip()
       {
    	   logPath = "D:\\test1\\";
    	   archivePathAndName = "D:\\test1\\";
    	   Calendar currentDate = Calendar.getInstance();
    	   SimpleDateFormat formatter= 
    		    new SimpleDateFormat("yyyyMMddHHmmss");
    	   String dateNow = formatter.format(currentDate.getTime());
    	   System.out.println("Now the date is :=>  " + dateNow);
     
    	   archivePathAndName = archivePathAndName+"Archive_Logs_"+dateNow+".zip";
       }
     
       public int MakeZip()
       {
    	   try {
    	    	// get a list of files from log directory
    	          File f = new File(this.logPath);
    	          String files[] = f.list();
     
    	          for (int i=0; i<files.length; i++) {
    	        	  files[i] = this.logPath + files[i];
    	          }
    	         BufferedInputStream origin = null;
     
    	         // Creation of a output stream to a file, this file will be the Zip archive final
    	         FileOutputStream dest = new FileOutputStream(archivePathAndName);
     
    	         // Creation of a output stream Zip to this file through the buffer
    	         ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest));
     
    	         // Specify the method of compression choosen
    	         out.setMethod(ZipOutputStream.DEFLATED);
    	         // Specify the compression level (int between 0 and 9)
    	         out.setLevel(9);
     
    	         // Buffer size for in and out buffer
    	         byte data[] = new byte[BUFFER];
     
     
    	         for (int i=0; i<files.length; i++) {
    	//        	LogFiles logFiles = new LogFiles(files[i]);
     
    	// 			if (logFiles.getFilenameOfLogfileAt(i) != "") {
     
    	        	 Pattern p = Pattern.compile("sys(.)+201003(.)+?6\\d");
    	        	 Matcher m = p.matcher(files[i]);
    	        	 boolean b = m.matches();
     
    	        	 f = new File(files[i]);
    	        	 if ((f.isDirectory()==false) && (m.find())) {
    		        	System.out.println("Adding: "+files[i]);
     
    		            // the file
    		            FileInputStream fi = new FileInputStream(files[i]);
     
    		            // In buffer
    		            origin = new BufferedInputStream(fi, BUFFER);
     
    		            // Zip Entry for each
    		            ZipEntry entry = new ZipEntry(files[i]);
     
    		            // Affect it to in stream
    		            out.putNextEntry(entry);
     
    		            // Écriture des entrées dans le flux de sortie par paquet de taille
    		            // égale aux tampons d’entrée et de sortie
    		            int count;
    		            while((count = origin.read(data, 0, 
    		              BUFFER)) != -1) {
    		               out.write(data, 0, count);
    		            }
    		            // close current entry 
    		            origin.close();
    	 			}
    	 			else {
    	 				System.out.println("This is a directory and won't be zipped: "+files[i]);
    	 			}
    	         }
    	         // close stream
    	         out.close();
    	    /*     
    	         // delete all the files
    	         for (int i=0; i<files.length; i++) {
    	       	  File fileToDelete = new File(files[i]);
    	       	  fileToDelete.delete(); 	  
    	         }
    	         */
    	      } catch(Exception e) {
    	         e.printStackTrace();
     
    	         return 0;
    	      }	 
     
    	      return 1;
       }
     
       public static void main (String argv[]) {
    	   Zip test = new Zip();
    	   test.MakeZip();
     
       }
    }
    Mais dans le zip file cree, j'ai le chemin D:/test1 alors que je voudrais que tous mes fichiers soient a la racine du zip et cela sans devoir executer le programme dans le meme dossier que mes fichiers a zipper.

    Merci de votre aide

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    C'est toi qui passe le chemin complet au constructeur de ZipEntry... Il suffit de lui passer seulement le nom du fichier.


    Sinon pense à utiliser des try/finally pour fermer les flux... c'est plus propre

    a++

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Salut,

    Merci pour ta reponse.

    Mais en fait si je retire le for qui rajoute le path :

    for (int i=0; i<files.length; i++) {
    files[i] = this.logPath + files[i];
    }

    il me met l'erreur : The system cannot find the file specified . C'est pour cela que j'ai rajoute le chemin. Cela ne marche pas non plus si au lieu du chemin je rajoute "./" ou ".\\"

    une suggestion?

    Je vais penser au try/catch aussi.

    Merci

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    a toi de faire la distinction entre le nom complet (utilisé pour lire le fichier d'origine) et le nom que tu passe en paramètre à ton ZipEnty.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    ah oui merci, j'ai mis le complete path dans FileInputStream et seulement le nom du fichier dans ZipEntry et cela marche.

    Bonne journee,

    Merci

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Cela marche bien mais j'essaie de mettre dans le zip tous les fichier qui suivent un certains pattern par exemple *.txt mais on peut combiner plusieurs path et plusieurs pattern.

    Y-a-t-il moyen de verifier si un fichier appele par exemple "test.zip" a deja ete mis dans le zip avant d'essayer d'inserer ce fichier?
    Sinon j'obtient une erreur a la creation du zip si 2 patterns se recouvrent.

    Merci

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    a tout de gérer ces cas en gardant une liste correcte de ce que tu as déjà fait.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    merci c'est ce que je pensais mais je me disais que j'avais peut etre loupe la methode de l'api qui permettait de verifier cela

Discussions similaires

  1. [Zip] Créer un fichier zip
    Par Mykeul dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 07/03/2005, 16h38
  2. Executer un fichier zip
    Par Sébastien THEVOT dans le forum C++Builder
    Réponses: 15
    Dernier message: 11/10/2004, 10h35
  3. Extraction d'un fichier zip
    Par dyason dans le forum Général Python
    Réponses: 2
    Dernier message: 13/07/2004, 12h35
  4. [Fichier Zip] Comment zipper un fichier
    Par caro_a dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 27/05/2004, 09h40
  5. faire un fichier .ini
    Par florent dans le forum C++Builder
    Réponses: 14
    Dernier message: 31/05/2002, 22h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo