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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 79
    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
    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
    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 confirmé
    Inscrit en
    Septembre 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 79
    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 confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 268
    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);
    		}
    	}

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 79
    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 confirmé
    Inscrit en
    Septembre 2006
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 79
    Par défaut
    D'ou viennent les classes NFichier et NFichierException ?

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