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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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 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 : 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
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.
Partager