Bonjour,
Je suis actuellement en train de développer une application graphique.
Dans cette appli, j'ai besoin de dézipper un certain nombre de fichiers.
J'aimerais permettre à l'utilisateur de connaitre (dans l'idéal) le temps restant avant la fin du dézippage,
ou plus simplement le pourcentage restant ou le nombre d'octets restant ... bref une info qui permettrait à l'utilsateur d'évaluer le temps de traitement restant !
Je sollicite donc votre aide.
Mes questions sont donc les suivantes :
Est-il possible, avec la méthode que j'utilise et avec seulement l'API Zip fournie dans Java (java.util.zip), d'obtenir une indication sur le temps de traitement restant ?
Si oui, pouvez-vous m'orienter vers la solution ?
Je précise que j'ai déjà mis en place le mécanisme me permettant de mettre à jour une barre de progression en fonction de l'avancement, il ne me manque que les infos "xxx total" et "xxx restant"
Mon problème ne concerne donc pas l'aspect graphique.
J'ai déjà recherché parmi les méthodes de ZipEntry, ZipFile et ZipInputStream, mais à part connaitre la taille de l'archive, je n'ai rien trouvé ^^'
Ci-dessous la méthode que j'utilise pour dézipper un fichier :
J'espère que quelqu'un saura me renseigner.
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76 private final void unzip(final String fichier) throws InterruptedException, IOException { // Variables locales BufferedOutputStream dest = null; BufferedInputStream is = null; ZipEntry entry; final ZipFile zipfile = new ZipFile(fichier); final Enumeration<? extends ZipEntry> e = zipfile.entries(); String cheminFichierOut; File fichierOut; byte[] data; int count = 0; FileOutputStream fos; // Tant qu'il reste des éléments à dézipper while (e.hasMoreElements()) { // Récupère l'élément entry = e.nextElement(); // Puis le nom de l'élément à dézipper cheminFichierOut = fichier.substring(0, fichier.lastIndexOf('\\') + 1) + entry.getName(); fichierOut = new File(cheminFichierOut); // Si le fichier n'est pas déjà présent if (!fichierOut.exists()) { is = new BufferedInputStream(zipfile.getInputStream(entry)); // On utilise 1 bloc try ... finally pour chaque ressource afin d'être sur que chacune sera libérée, même en cas d'exception try { data = new byte[UnZipper.BUFFER]; fos = new FileOutputStream(cheminFichierOut); try { dest = new BufferedOutputStream(fos, UnZipper.BUFFER); try { // Ecriture while ((count = is.read(data, 0, UnZipper.BUFFER)) != -1) { this.testInterruption(); dest.write(data, 0, count); } } finally { dest.flush(); dest.close(); } } finally { fos.close(); } } finally { is.close(); } } } }
Merci d'avance à ceux qui se pencheront sur mon problème.
N'hésitez pas à me poser des questions si vous jugez qu'il vous manque des infos.
Cordialement
Vincent Daniel
Partager