[JAVA] Lire une archive avec Java

Lire une archive avec Java [JAVA] - Java - Programmation

Marsh Posté le 20-05-2009 à 16:17:17    

Bonjour.
 
Je tente de réaliser un logiciel en java et pour ce faire je dois lire le contenu d'une archive que j'ouvre d'habitude avec 7-Zip en mode graphique.
J'ai essayer les classes en rapport avec Zip (de java.util.zip) et j'arrive à lister le contenu de mon archive, or le problème est que cette archive contient d'autres archives. (Format standard je ne peux rien y changer)  
 
Le problème est donc que je n'arrive tout d'abord pas à lire(les parses car ce sont des fichiers xml) les fichiers contenu dans mon archive et ensuite je n'arrive pas à ouvrir les archives dans l'archive (ca suit toujours là?).
 
Si quelqu'un pense avoir une solution à ce problème je suis preneur.
 
Je précise que j'ai cherché sur Google mais sans trop de succès.
 
Merci à vous
 
gorion18

Reply

Marsh Posté le 20-05-2009 à 16:17:17   

Reply

Marsh Posté le 20-05-2009 à 16:35:36    

Je n'ai jamais touché au Zip avec Java mais si tu décompresses dans un fichier temporaire les archives de ton zip pour les analyser ensuite ça marche pas ?
Pourquoi tu dis que tu n'arrives pas à les ouvrir ? Il se passe quoi exactement ?

Reply

Marsh Posté le 20-05-2009 à 16:40:28    

J'utilise en fait des ZipEntry mais ces objets en contiennent que des informations sur les fichiers archivés mais pas le fichier en lui-même(enfin c'est ce que je crois)
 
Après je n'ai pas beaucoup utilisé tout ca donc peut^-être que je m'y prend mal. Voila le code :

Code :
  1. FileInputStream fis = new FileInputStream(nomFichier);
  2.  BufferedInputStream bis = new BufferedInputStream(fis);
  3.  ZipInputStream zin = new ZipInputStream(bis);
  4.  ZipEntry ze = new ZipEntry();
  5.  while ((ze = zin.getNextEntry()) != null) {
  6.   System.out.println(ze.toString());//me retourne le nom du fichier en cours
  7.  }


 
Je ne sais pas si tout ce code est correct donc vos avis sont les bienvenus.
 
Merci
 
Cordialement
 
gorion18

Reply

Marsh Posté le 21-05-2009 à 15:14:34    

gorion18 a écrit :

J'utilise en fait des ZipEntry mais ces objets en contiennent que des informations sur les fichiers archivés mais pas le fichier en lui-même(enfin c'est ce que je crois)

 

ZipInputStream.read()

Message cité 1 fois
Message édité par lorill le 21-05-2009 à 15:15:30
Reply

Marsh Posté le 25-05-2009 à 09:14:56    


 
J'utilise déja cette fonction mais cela ne marche pas. Voila le code :  

Code :
  1. BufferedOutputStream dest = null;
  2. FileInputStream file_decompress = new FileInputStream(nomFichier);
  3. BufferedInputStream buffi = new BufferedInputStream(file_decompress);
  4. ZipInputStream zis = new ZipInputStream(buffi); 
  5. ZipEntry entree; 
  6. int count;
  7. while((entree = zis.getNextEntry()) != null)
  8. {
  9. System.out.println(entree);
  10. FileOutputStream fos = new FileOutputStream(entree.getName().toString());
  11. dest = new BufferedOutputStream(fos, BUFFER);   
  12. while ((count = zis.read(data, 0, BUFFER)) != -1)
  13.  dest.write(data, 0, count);   
  14. }       
  15. dest.flush();
  16. dest.close();
  17. }
  18. zis.close();

Tout ceci est dans un gros bloc try/catch
 
En fait j'ai l'erreur suivante :  nomdunFichierDeMonArchive(dans des dossiers) (Le chemin d'accès spécifié est introuvable)
J'ai simplifié la chose en extrayant moi même depuis l'archive principale(contenant 2 archives) et je souhaite maintenant extraire le contenu d'une archive simple(contenu à al base dans l'archive principale)
 
Si quelqu'un à une idée car j'avoue ne pas comprendre pourquoi cela ne fonctionne pas.
 
Merci
 
gorion18

Reply

Marsh Posté le 25-05-2009 à 09:21:38    

Citation :

En fait j'ai l'erreur suivante :  nomdunFichierDeMonArchive(dans des dossiers) (Le chemin d'accès spécifié est introuvable)


 
A mon avis, rien a voir avec la decompression, et plus probablement avec l'écriture de ton fichier qui porte le même nom.
 
Tu n'as pas mis la ligne, mais l'erreur est probablement sur la création du FileOutputStream.  
 

Citation :

If the file exists but is a directory rather than a regular file, does not exist but cannot be created, or cannot be opened for any other reason then a FileNotFoundException is thrown.


 
Essaye de mettre un autre nom de fichier, tu seras vite fixé.

Reply

Marsh Posté le 03-06-2009 à 08:52:30    

Je n'ai toujours pas trouvé l'erreur. J'étais passé à autre chose en attendant mais là je suis obligé de repasser dessus. Je vone le code complet de ma méthode pour analyse :
 

Code :
  1. static void lireArchive(String nomFichier) throws FileNotFoundException {
  2.  try {
  3.   BufferedOutputStream dest = null;
  4.   FileInputStream file_decompress = new FileInputStream(nomFichier);
  5.   BufferedInputStream buffi = new BufferedInputStream(file_decompress);
  6.   ZipInputStream zis = new ZipInputStream(buffi); 
  7.   ZipEntry entree; 
  8.   int count;
  9.   while((entree = zis.getNextEntry()) != null)
  10.   {
  11.    System.out.println(entree); 
  12.    FileOutputStream fos = new FileOutputStream(entree.toString());
  13.    dest = new BufferedOutputStream(fos, BUFFER);   
  14.    while ((count = zis.read(data, 0, BUFFER)) != -1)
  15.    { 
  16.     dest.write(data, 0, count);
  17.    }     
  18.    dest.flush();
  19.    dest.close();
  20.   }
  21.   zis.close();
  22.    }catch (IOException e2) {System.out.println("Erreur : " +e2.getMessage().toString());/* File reading or writing error */
  23.   
  24. }


 
Quelqu'un à une petite idée de l'erreur? CAr j'ai toujorus le message suivant : Erreur : Flux\FI2CAF\_Commun\Ressources\XSD\reprises.xsd (Le chemin d'accès spécifié est introuvable)  
(le chemin est un fichier contenu dans l'archive)
 
Merci de votre aide.
 
Cordialement
 
gorion18


Message édité par gorion18 le 03-06-2009 à 08:53:31
Reply

Marsh Posté le 03-06-2009 à 09:53:53    

Tu ne peut pas lire ton archive contenue dans un autre archive en utilisant son nom, car ce fichier est inconnu pour le système d'exploitation.
En fait tu doit lire ton archive en utilisant la méthode getInputStream(ZipEntry) de ZipFile. Dans ton cas tu devras également décompresser le flux retourné par cette méthode.


---------------
Light is right
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed