[JAVA] Unzip d'un fichier avec répertoire

alaincnes Messages postés 5 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 26 janvier 2007 - 24 janv. 2007 à 13:00
alaincnes Messages postés 5 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 26 janvier 2007 - 26 janv. 2007 à 10:45
Bonjour,

Je sais que la question a déjà été posée et qu'il y a soi disant plein de codes mais j'en ai essayé plus de 15 et aucun ne fonctionne.

Je cherche à dézipper un fichier contenant des répertoires.
Quelque soit le source utilisée j'ai toujours la meme erreur :

java.io.FileNotFoundException: XXX (Le chemin d'accès spécifié est introuvable)
    at java.io.FileOutputStream.open(Native Method)
    at java.io.FileOutputStream.(Unknown Source)
    at java.io.FileOutputStream.(Unknown Source)
    at Zip.unzip(Zip.java:40)
    at Zip.main(Zip.java:136)

En sachant que ce meme code fonctionne quand il n'y a pas de répertoire.

Quelqu'un peut il m'aider, m'indiquer une source fonctionnant ou autres ?

D'avance merci

3 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
24 janv. 2007 à 17:08
Salut,

tu as essayé ce code (ICI) ? perso je ne l'ai pas testé mais bon defois que ... sinon va falloir que tu montre un peux ton code de décompresseion de ZIP

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
sheorogath Messages postés 2448 Date d'inscription samedi 21 février 2004 Statut Modérateur Dernière intervention 29 janvier 2010 17
24 janv. 2007 à 17:37
nop je ne gerais qu'un document donc ca m'etonnerais que ca marche

sinon pour gerer les dossier si mes souvenir sont bon avec ZipEntry tu peux tester si tu as un dossir ou pas (patiente je lance eclipse)
donc apres faut voir comment c'est gere ...

deja pour dezippe quand il n'y a que des fichiers je fais ca :

ZipInputStream in = new ZipInputStream(new FileInputStream(file));
        ZipEntry zi;
    while ((zi = in.getNextEntry()) != null) {
            File f = new File(zi.getName());
            vf.add(f);
            FileOutputStream out = new FileOutputStream(f);
            int c = 0;
            while ((c = in.read()) != -1) {
                out.write(c);
            }
            out.close();
        }
        in.close();

mais je trouve ca long ... pour les gros fichier c pas top je vais essayer doptimiser ce soir

zi.isDirectory() te retourne si c'est un dossier ... donc ce que je ferais si j'etait toi je recupere le nom , je cree le dossier la ou tu le veux avec le nom que tu as recuperer ensuite tu passe directement a l'entree suivante et je suppose que tu aurras le dossier dans lequel l'entree est stocke
en pseudo code ca ferais un truc du genre

ZipInputStream in = new ZipInputStream(new FileInputStream(file));

        ZipEntry zi;

    while ((zi = in.getNextEntry()) != null) {
if(zi.isDirectory()){
new File("." + zi.getName()).mkdir();
continue;
}

            File f = new File(zi.getName());

            vf.add(f);

            FileOutputStream out = new FileOutputStream(f);

            int c = 0;

            while ((c = in.read()) != -1) {

                out.write(c);

            }

            out.close();

        }

        in.close();

j'ai pas teste a toi de voir
"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
0
alaincnes Messages postés 5 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 26 janvier 2007
26 janv. 2007 à 10:45
Finalement, je fais cela :

static public final void unzip(File file, String destinationPath,
            boolean force, Checksum checksum) throws IOException {
        ZipFile zipfile = new ZipFile(file);
        byte[] buf = new byte[BUFFER_SIZE];
        FileInputStream fis = new FileInputStream(zipfile.getName());        CheckedInputStream cis (checksum null) ? null
                : new CheckedInputStream(fis, checksum);
        BufferedInputStream bis = new BufferedInputStream((cis != null) ? cis
                : fis);
        ZipInputStream zis = new ZipInputStream(bis);
        ZipEntry entry = null;
        try {
            while ((entry = zis.getNextEntry()) != null) {
                File f = new File(destinationPath + File.separatorChar
                        + entry.getName());
                if (entry.isDirectory()) {
                    System.out.println(entry.getName());
                    new File(entry.getName()).getParentFile().mkdir();
                }
                if (f.exists()) {
                    if (force) {
                        f.delete();
                    } else {
                        continue;
                    }
                }
                creationDirectory(f.getAbsolutePath());
                f.createNewFile();
                FileOutputStream fos = new FileOutputStream(f);
                BufferedOutputStream bos = new BufferedOutputStream(fos,
                        BUFFER_SIZE);
                int nbRead;
                try {
                    while ((nbRead = zis.read(buf)) > 0) {
                        bos.write(buf, 0, nbRead);
                    }
                } finally {
                    bos.flush();
                    bos.close();
                    fos.close();
                }
            }
        } finally {
            zis.close();
            bis.close();
            if (cis != null) {
                cis.close();
            }
            fis.close();
        }
    }

Mais les dossiers qui sont vides sont créés comme des fichiers.
0
Rejoignez-nous