0
java.util.zip.ZipInputStream zis = new java.util.zip.ZipInputStream(new BufferedInputStream(is));

    java.util.zip.ZipEntry entry;
    new File(outdir+ File.separator+"changelog").delete();
    new File(outdir+ File.separator+"media").delete();
    try {
        while ((entry = zis.getNextEntry()) != null) {

            File of = new File(outdir + File.separator + entry.getName());

            if (entry.isDirectory()) {
                of.mkdirs();
                continue;
            } else {
                File xx = new File(of.getParent());
                if (!xx.exists()) {
                    Stack<String> todo = new Stack<String>();
                    do {
                        todo.push(xx.getAbsolutePath());
                        xx = new File(xx.getParent());
                    } while (!xx.exists());
                    while (todo.size() > 0) {
                        xx = new File(todo.pop());
                        if (!xx.exists()) {
                            xx.mkdirs();
                        }
                    }
                }
            }

            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(of), buffer.length);

            cpio(new BufferedInputStream(zis), bos, "unzip:" + entry.getName());

            bos.flush();
            bos.close();
        }
    } catch (IllegalArgumentException e) {
        // problem with chars in entry name likely
    }catch(Exception e){
        System.out.println(e+"Srikanth");
    }
    zis.close();

}

entry.isDirectory()は常に false を返すため、ディレクトリではなくファイルを作成しています。何が問題ですか?

4

2 に答える 2

0

ZipInputStreamからのZipEntryは、\ でファイルの末尾にある空のディレクトリを表し、/ で要素を持つディレクトリを表します

そのため、entry.isDirectory()は空のディレクトリでは機能しません。

ZipFileZipEntryは正常に動作します。ZipInputStreamZipEntryの動作には違いがあると思います。

于 2012-07-05T06:50:11.427 に答える
0

isDirectory は、Windows 標準オプション「sent to/zip files」で圧縮されたファイルではまったく機能しません。

zip の形式は、7zip や Winzip などのツールで生成された形式とは異なります。(標準のアーカイブ圧縮があると便利です:D)

于 2015-04-17T14:20:47.120 に答える