Bonjour à tous, je suis là-dessus depuis un moment(et j'ai l'impression que c'est quelque chose de très idiot...comme la majorité des erreurs que je fais) lol.
Eh ben voilà, je fais en ce moment une petite application de
compression et de décompression de fichier et, par une version ou par l'autre...je n'arrive tout simplement pas à faire en sorte que l'on puisse
Choisir(par un arbre ou un chooser par exemple)
le dossier où les fichiers seront décompressés, je me disais que vous pouriez sans doute m'aider, me donner des conseils etc.
Voici les deux versions du code qui me permet de faire cela(C'est au clic sur un bouton que le tout se produit)
try
{
//Config du FileChooser choixFichier.
setFileFilter(
new ZipFilter()); choixFichier.
setMultiSelectionEnabled(
false);
choixFichier.
setFileSelectionMode(
JFileChooser.FILES_ONLY);
choixFichier.
showOpenDialog(
this);
String zipName;
zipName=choixFichier.
getSelectedFile().getPath(); BufferedOutputStream dest =
null; //Destination
FileInputStream archive=
new FileInputStream(zipName);
//On ouvre le fichier et on ouvre le buffer pour le fichier à décompresser! BufferedInputStream bufFich =
new BufferedInputStream(archive);
//Ouverture du fichier avec le buffer ZipInputStream zIS =
new ZipInputStream(bufFich);
//Parcourir les entrées du zip
ZipEntry entree;
i
nt count;
while((entree = zIS.
getNextEntry()) !=
null)
{
//Création du flux pour le fichier
FileOutputStream fOS =
new FileOutputStream(entree.getName()); // On affecte un buffer au flux dest =
new BufferedOutputStream(fOS, BUFFER);
// On écrit sur le disque while ((count = zIS.read(data, 0, BUFFER)) != -1)
{
dest.
write(data, 0, count);
}
// On vide le tampon
dest.
flush();
// On ferme le fichier créé
dest.close();
}
// On ferme l'archive zIS.close();
}
catch (IOException e) {
}
Façon 2:
try
{
//Config du FileChooser
choixFichier.
setFileFilter(new ZipFilter());
choixFichier.
setMultiSelectionEnabled(
false);
choixFichier.
setFileSelectionMode(
JFileChooser.FILES_ONLY);
choixFichier.
showOpenDialog(
this);
String zipName;
//On signale une zipFile ZipFile zf =
new ZipFile(zipName);
Enumeration listEntree = zf.
entries(); //Une liste qui va contenir les entrées
while (listEntree.
hasMoreElements()) {
//Tant qu'il y a des éléments dans la liste ZipEntry ze = (ZipEntry) e.
nextElement(); // System.out.println("Unzipping " + ze.getName()); FileOutputStream fout =
new FileOutputStream(ze.
getName()); InputStream in = zf.
getInputStream(ze); //Renvoie un InputStream pour une entrée de données!
for (int c = in.
read(); c != -1; c = in.
read()) {
fout.
write(c); }
in.
close(); //on ferme les flux fout.
close(); }
catch (IOException e)
{
}
Pour le reste, ce sera revu et corrigé plus tard, mais c'est vraiment le détail du choix du dossier qui me chicote...car en ce moment, il ne fait qu'extraire dans le dossier où se trouve le programme.
Désolé pour la lisibilité, je ne suis pas habitué au forum et je n'ai pas remarqué une balise de code.
J'espère que ma question est claire, lol, je ne sais pas, je verrai j'imagine.
Merci à tous à l'avance!