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

Entrée/Sortie Java Discussion :

Ajouter un fichier à un Zip


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 79
    Points : 61
    Points
    61
    Par défaut Ajouter un fichier à un Zip
    Bonjour,
    je souhaiterais rajouter un fichier à un zip.
    Seulement, mon code écrase l'archive précédente et je n'ai dans mon archive que le dernier fichier. Comment faire pour ajouter un fichier (écraser le fichier existant s'il y en a un du même nom).
    Merci

    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
     
    	  private void save(String zipName) {
    		  try {
    			  ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(ZIP_FILE));
     
    			  zip.setMethod(ZipOutputStream.DEFLATED);
    			  zip.setLevel(Deflater.BEST_COMPRESSION);
     
    			  File dataFile = new File(zipName);
    			  addFile(dataFile, zip);
    			  zip.close();
    		  } 
    		  catch (FileNotFoundException fileNotFound) {}
    		  catch (IOException io) {}
    	  }
     
    	  private void addFile(File file, ZipOutputStream zip) {
    		  try {
    			  	FileInputStream in = new FileInputStream(file);
    			  	byte[] bytes = new byte[in.available()];
    			  	in.read(bytes);
    			  	in.close();
     
    			  	ZipEntry entry = new ZipEntry(file.getName());
    				entry.setTime(file.lastModified());
    				zip.putNextEntry(entry);
    				zip.write(bytes);
    				zip.closeEntry();
    			} 
    			catch (FileNotFoundException fileNotFound) {new FenetreException(fileNotFound,true);}
    			catch (IOException io) {new FenetreException(io,true);}
    	  }

  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,


    Si je ne me trompe pas, il faut réécrire tout le ZIP...

    a++

  3. #3
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 79
    Points : 61
    Points
    61
    Par défaut
    Oui,
    C'est ce que je pensais faire dans le pire des cas, ce n'est donc pas possible de rajouter un fichier sans reconstruire toute l'archive ?

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 268
    Points : 199
    Points
    199
    Par défaut
    Je ne sais pas si ton problème a été résolu depuis le temps, mais moi, pour ajouter un zip sans reconstruire le zip, je fais :
    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
    	/** Ajoute un fichier dans le fichier ZIP
             */
    	public void add(File unFichier) throws NFichierException {
    		try {
    			//output est un ZipOutputStream output = new ZipOutputStream(new FileOutputStream(fichier)); fais dans mon constructeur (champ de classe). Dans cette classe, j'ai les méthodes d'ouverture et de fermeture de cet ZipOutputStream.
    			//Ecrire l'entrée
    			output.putNextEntry(new ZipEntry(unFichier.getName()));
    			//Chargement du fichier
    			byte[] bytes = NFichier.getBytes(unFichier);
    			output.write(bytes);
    			//Fermeture du segment
    			output.closeEntry();
    		}
    		catch (IOException e) {
    			throw new NFichierException("Erreur sur l'ajout du fichier '"+unFichier.getName()+"' à l'archive '"+fichierZIP.getName()+"' !",e,unFichier);
    		}
    	}
    Pensez au tag quand votre problème est réglé !

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 79
    Points : 61
    Points
    61
    Par défaut
    Non, je n'ai toujours pas trouver de solution.
    Je réécris entièrement mon Zip à chaque fois.
    Merci JohnNC, je vais tester ta méthode.

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 79
    Points : 61
    Points
    61
    Par défaut
    D'ou viennent les classes NFichier et NFichierException ?

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 268
    Points : 199
    Points
    199
    Par défaut
    La classe NFichier est une simple surcharge de File, qui me permet de gérer (pour l'instant) uniquement la copie de fichier (ce que ne fait pas File).
    NFichierException est une classe d'exception qui me permet de centraliser toutes les IOException (et le nom du fichier) pour des affichages plus clair à l'utilisateur.
    Si tu en as besoin, je peux fournir les classes en pièces jointes.

    Mais tu dois surement avoir besoin de la méthode getBytes(File) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /** Récupération d'un tableau de byte d'un fichier.
     */
    public static byte[] getBytes(File fichier) throws NFichierException {
    	try {
    		FileInputStream fis = new FileInputStream(fichier);
    		byte[] bytes = new byte[fis.available()];
    		fis.read(bytes);
    		fis.close();
    		return bytes;
    	}
    	catch (IOException e) {
    		throw new NFichierException("Erreur sur la conversion en byte[] du fichier.",e,fichier);
    	}
    }
    Pensez au tag quand votre problème est réglé !

  8. #8
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 79
    Points : 61
    Points
    61
    Par défaut
    J'ai essayé ta fonction, mais ca me fait toujours la même chose.

    Ca marche si je rajoute plein de fichier avant de fermer mon archive.

    En fait, si mon archive existe déjà sur mon poste et que je veux lui rajouté un fichier, ca ne marche pas, il me supprime tout et ne garde que le dernier que je voulais rajouté.

    Comment ouvres tu et fermes tu ton archive ?

  9. #9
    Membre expérimenté
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Points : 1 640
    Points
    1 640
    Par défaut
    Regarde du coté de la lib TrueZip.
    En premier lieu, utilisez un moteur de recherche.
    En second lieu, postez sur le forum adéquat !

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 268
    Points : 199
    Points
    199
    Par défaut
    Citation Envoyé par ggounouman Voir le message
    J'ai essayé ta fonction, mais ca me fait toujours la même chose.

    Ca marche si je rajoute plein de fichier avant de fermer mon archive.

    En fait, si mon archive existe déjà sur mon poste et que je veux lui rajouté un fichier, ca ne marche pas, il me supprime tout et ne garde que le dernier que je voulais rajouté.

    Comment ouvres tu et fermes tu ton archive ?
    Il est vrai que dans mon cas, c'est à chaque fois une nouvelle archive, dans un même traitement. N'utilisant pas encore la classe ZipFile, ("ni TrueZip indiqué dans le message précédent), je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /** Stream de création d'un fichier ZIP */
    private ZipOutputStream output = null;
     
    // Un extrait, pour l'ouverture
    public monConstructeur(File fichier) {
      output = new ZipOutputStream(new FileOutputStream(fichier));
    }
     
    //Pareil pour la fermeture
    public void fermer() {
      output.close();
    }
    Après, je ne maitrise pas les "Stream" en général. Mais comme pour les "logs", il doit bien y avoir un moyen de dire "append" au fichier (comme un "new FileOutputStream(file,true)" peut être ?).

    Je n'ai pas testé avec un fichier ZIP existant, et désolé mais je n'en ai pas le temps pour l'instant
    Pensez au tag quand votre problème est réglé !

  11. #11
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 79
    Points : 61
    Points
    61
    Par défaut
    Merci JohnNC pour ton aide.
    Patriarch24, je regarderai la lib TrueZip.

Discussions similaires

  1. Ajouter un fichier à un Zip déjà existant
    Par leonor dans le forum LabVIEW
    Réponses: 2
    Dernier message: 05/02/2015, 15h32
  2. Ajouter un fichier dans une archive zip existante
    Par dawadam dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 31/05/2010, 12h19
  3. Ajouter un fichier dans un zip
    Par Ptikir dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 24/03/2009, 14h02
  4. Réponses: 2
    Dernier message: 03/10/2007, 16h45
  5. [LabView 8.20] Ajouter un fichier dans un zip
    Par Gaorr dans le forum LabVIEW
    Réponses: 0
    Dernier message: 19/09/2007, 14h59

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