Bonjour,
J'ai un petit problème lorsque je crée un fichier ZIP à partir de fichiers ayant des caractères spéciaux dans le nom du fichier (accents ou C-cédille).
Par exemple :
"Jean-François Stévenin.jpg" devient dans le fichier zip : "Jean-Fran+ºois St+®venin.jpg"
Lorsque je dé-zip ce fichier j'obtiens hélas le nom modifié.
Voici le code qui me permet de créer un fichier ZIP à partir d'une liste. C'est une classe que j'ai adaptée à partir d'un code trouvé sur un forum.
Cela marche parfaitement bien si ce n'est ce problème de caractères spéciaux. Je pense qu'il faut que je précise quelque part le code (utf ou ISO-...) mais je ne sais pas comment.
Merci d'avance pour tout conseil ou commentaire
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
37
38
39
40
41
42
43
44
45
46
47
48 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class ZipFiles { public static void CreateZip(String dir, String[] liste) // la liste de fichier doit être passée dans un tableau de strings. { try { FileOutputStream fos = new FileOutputStream( "./work/"+ "Cinephil_Import.zip"); ZipOutputStream zos = new ZipOutputStream(fos); for (int i=0; i< liste.length;i++) { String fileName = "Work/"+liste[i]; addToZipFile(fileName, zos); } zos.close(); fos.close(); } catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) { e.printStackTrace();} } public static void addToZipFile(String fileName, ZipOutputStream zos) throws FileNotFoundException, IOException { System.out.println("Writing '" + fileName + "' to zip file"); File file = new File(fileName); FileInputStream fis = new FileInputStream(file); ZipEntry zipEntry = new ZipEntry(fileName); zos.putNextEntry(zipEntry); byte[] bytes = new byte[1024]; int length; while ((length = fis.read(bytes)) >= 0) { zos.write(bytes, 0, length); } zos.closeEntry(); fis.close(); } }
Partager