Probleme de taille avec ZipInputStream - Java - Programmation
Marsh Posté le 30-10-2003 à 16:03:46
euh c'est un peu brouillon j'ai pas compris. Tu arrives à créer une archive zip ou pas? tu peux l'ouvrir avec un soft annexe (genre winzip)
Marsh Posté le 30-10-2003 à 16:24:16
Il n'y a pas besoin de faire un setSize() pour ecrire ni un getSize() pour lire.
Ca se manipule comme un OutputStream normal.
Si tu veux j'ai un classe qui ecris un fichier ZIP a la volée.
Marsh Posté le 31-10-2003 à 21:26:57
DarkLord : je sais que c'est un peu brouillon, mais oui, je fais des fichiers Zip lisibles.
Je me sert de getSize() pour recréer mon tableau de bytes de bonne taille a la lecture c'est pour ca. Mais c'est bizarre que ca marche quand c'est pas zippé (level 0 - STORED) et pas quand c'est compressé (level 9 - DEFLATED).
Merci, je vais faire autrement pour recréer mon tableau de bytes.
Edit : y'a beau avoir marqué Shaman Yo comme pseudo, c'est bien la meme personne, Yo C Spi
Marsh Posté le 03-11-2003 à 09:23:29
Bon alors voici un petit exemple d'une classe permettant d'ecrire un fichier ZIP a la volee:
Code :
|
Patapé si le code n'est pa bo !
Marsh Posté le 03-11-2003 à 09:38:54
ah non il a l'air top au contraire
Edit: euh on fait comment pour ajouter des fichiers au juste
Marsh Posté le 03-11-2003 à 17:49:42
Je crois que je me suis mal fait comprendre (en meme temps c'est normal vu les explications que j'ai donné, je pensais que ton code m'aiderai Nerrisson mais non.
Je résume :
Je n'ai aucun problème pour créer un zip, mais voila comment je fais (simplifié) :
Code :
|
Mais c'est pour lire le zip ainsi créé que j'ai des problèmes :
Code :
|
La methode getSize() me renvoie '-1' et ce uniquement quand je créé des Zip avec une compression (qui est bien effective, les fichiers sont plus petits que la normale), si les données sont juste stockées dans un Zip, le problème ne se montre pas.
Merci !
(Si vous ne comprenez encore pas, n'hésitez pas a le dire mais je dois faire mes posts sans le code sous les yeux)
Marsh Posté le 03-11-2003 à 17:59:02
Bon ba j'ai testé ton bout de code pour lire et euh... j'ai pas de problème !
J'ai fait ce truc rapidos en 1.4 et ça marche nickel :
Code :
|
Donc ça doit être ton écriture qui foire
Marsh Posté le 03-11-2003 à 18:12:43
Ah ouais non. Chu en train de tester le merdier, c'est vrai que c'est bien laid et que ça pue. WinZip trouve bien le truc une fois écrit et tout mais pour le lire, ZipInputStream retrouve bien le nom nais pas la taille Alors qu'il y arrive avec un fichier ZIP à moi...
Ca sent mauvais
EDIT : ouais bin j'confirme, c'est lors de l'écriture, le setSize() a pas l'air de faire son taf La taille n'est pas écrite dans le .zip final, donc forcément, le getSize() retourne -1. Y a pu qu'à trouver pourquoi ça se fait pas lors de l'écriture
Marsh Posté le 03-11-2003 à 18:33:42
Trouvé \o/
La réponse est là : http://mindprod.com/jgloss/zip.html
Citation : |
Moralité : toujours utiliser ZipFile pour lire les fichiers Zip.
EDIT : un pitit bout de code qui marche pour avoir des bons points
Code :
|
Marsh Posté le 04-11-2003 à 16:39:50
Ok merci a tous!
2 questions :
1 - Nerisson, pourquoi utilises-tu un BufferedInputStream?
2 - Il y a dans ZipInputStream et ZipEntry le methode setMethod(int).
Laquelle définit le type de compression exactement? J'ai cru comprendre que celle de ZipEntry prédominait sur celle de ZipInputStream. Est-ce exact?
Merci.
Marsh Posté le 04-11-2003 à 16:44:45
Yo c Spi a écrit : Ok merci a tous! |
C'est dans ZipOutputStream
Bin je dirais que normalement ça s'applique à une ZipEntry mais que si elle n'est pas settée dans l'objet, alors c'est celle du ZipOutputStream qui sera utilisée. C'est d'ailleurs ce qui est dit dans la javadoc :
Citation : This default will be used whenever the compression method is not specified for an individual ZIP file entry |
Marsh Posté le 04-11-2003 à 17:44:15
Yo c Spi a écrit : Ok merci a tous! |
Euh, c'est un BufferedOutputStream.
Ca sert a ameliorer les performances en utilisant un buffer d'ecriture.
Marsh Posté le 30-10-2003 à 16:02:27
Salut !
J'ai un problème lors de la création de fichiers zippé en Java (avec ZipOutputStream).
Lors de la lecture du fichier encodé, si le fichier est compressé (DEFLATED), je n'arrive pas a bien le relire car le ZipEntry que je prends ne me renvoie pas de taille (-1).
Je fais pourtant la méthode ZipEntry.setSize() a la création mais je ne peux pas faire de setCompressedSize(), ne connaissant pas la taille une fois compressé.
Comment faire pour compresser les fichiers et récupérer la bonne taille?
Merci!