[Gzip] - Débutante - problème compression/decompression.
Bonjour,
je rencontre un souci énervant, je ne suis pas une experte en JAVA, je me forme seule avec la javadoc, et je rencontre un souci.
J'utilise 2 class codée par moi-même...
1 qui compress en gzip
1 qui décompresse en gzip.
(Ce que je Gzip ? un ficher word.xml (Wxml oui oui Microsoft like) )
Mon souci ?
Quand je vérifie l'archive qui est crée ainsi : l'archive est corrompue.
Et quand j'ouvre l'archive, sans essayer d'extraite, le fichier interne est effectivement d'une taille différente du fichier source.
Déjà donc de ce point de vue, pas cool ça ne fonctionne pas.
Mais le cas devient pire :
par la suite le fichier (.xml) qui est décompressé est vide !!!...
(bon en même temps conséquence évidente que la compression ne marche déjà pas.)
Code:
1 2 3
|
boolean bGzip = OutilsZip.compress(inCheminFile, OutCheminFile);// > test.xml // >> test.xml.tar.gz
boolean bUnGzip = OutilsZip.uncompress(OutCheminFile, inCheminFile+".xml"); // > test.xml.tar.gz // >> test.xml.xml |
Dans OutilsZip.
Code:
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
|
public static boolean compress(String iFilename, String oFilename){
try {
Logger.debug("on compresse");
Logger.debug("in="+iFilename+"out="+oFilename); // retourne bien le nom des deux fichiers concernés dans mon log
FileInputStream fis = new FileInputStream(iFilename);
GZIPOutputStream gos = new GZIPOutputStream(new FileOutputStream(oFilename));
File f = new File(iFilename);
Long L = new Long(f.length());
int i = L.intValue();
Logger.debug("taille du fichier en Long =" + i); // Me renvoie bien la taille de mon fichier XML de départ
byte[] byt = new byte[i] ;
int offset;
while ((offset = fis.read(byt)) > 0)
{
gos.write(byt, 0, offset);
}
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
} |
Code:
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 33 34 35 36
|
public static boolean uncompress(String iFilename, String oFilename){
try {
Logger.debug("on décompresse");
Logger.debug("in="+iFilename+"out="+oFilename); // retourne bien le nom des deux fichiers concernés dans mon log
// Ouvre le fichier compresse
GZIPInputStream gis = new GZIPInputStream(new FileInputStream(iFilename));
OutputStream os = new FileOutputStream(oFilename);
File f = new File(iFilename);
Long L = new Long(f.length());
int i = L.intValue();
Logger.debug("taille du fichier en L =" + i); // me retourne Zéro !!!
// transfere les byte compresse vers le fichier de sortie
byte[] buf = new byte[i];
int offset;
while ((offset = gis.read(buf)) > 0)
{
os.write(buf, 0, offset);
}
return true;
} catch (IOException e) {
e.printStackTrace();
return false;
}
} |
Pour vos questions :
"Pourquoi tu as choisi de faire [....completez par la mention de votre choix ...] ?"
=> parce que ça me semblait une bonne idée.
Sinon je suis ouverte à toutes vos remarques, critiques, corrections...
Merci à ceux qui prendrons le temps de me lire.