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 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 ?

  7. #7
    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
    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);
    	}
    }

  8. #8
    Membre confirm�
    Inscrit en
    Septembre 2006
    Messages
    79
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 79
    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 Expert
    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 : 42
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par d�faut
    Regarde du cot� de la lib TrueZip.

  10. #10
    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
    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

  11. #11
    Membre confirm�
    Inscrit en
    Septembre 2006
    Messages
    79
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 79
    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