Décompression Zip : connaitre l'avancement ?
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 :
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 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();
}
}
}
} |
J'espère que quelqu'un saura me renseigner.
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