25

サンプルコードはありますか、ZIPから目的のディレクトリにフォルダを部分的に解凍する方法はありますか?フォルダ「FOLDER」からすべてのファイルをバイト配列に読み込んだのですが、そのファイル構造からどのように再作成しますか?

4

8 に答える 8

21

これが私が使用しているコードです。必要に応じて BUFFER_SIZE を変更してください。

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public final class ZipUtils {

    private static final int BUFFER_SIZE = 4096;

    public static void extract(ZipInputStream zip, File target) throws IOException {
        try {
            ZipEntry entry;

            while ((entry = zip.getNextEntry()) != null) {
                File file = new File(target, entry.getName());

                if (!file.toPath().normalize().startsWith(target.toPath())) {
                    throw new IOException("Bad zip entry");
                }

                if (entry.isDirectory()) {
                    file.mkdirs();
                    continue;
                }

                byte[] buffer = new byte[BUFFER_SIZE];
                file.getParentFile().mkdirs();
                BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));
                int count;

                while ((count = zip.read(buffer)) != -1) {
                    out.write(buffer, 0, count);
                }

                out.close();
            }
        } finally {
            zip.close();
        }
    }

}
于 2012-05-17T11:06:58.743 に答える
11

AntCompressライブラリを使用しても同じことができます。フォルダ構造を保持します。

Mavenの依存関係:-

<dependency>
    <groupId>org.apache.ant</groupId>
    <artifactId>ant-compress</artifactId>
    <version>1.2</version>
</dependency>

サンプルコード:-

Unzip unzipper = new Unzip();
unzipper.setSrc(theZIPFile);
unzipper.setDest(theTargetFolder);
unzipper.execute();
于 2013-03-20T04:04:28.483 に答える
0

zip ファイルからすべてのエントリを取得する必要があります。

Enumeration entries = zipFile.getEntries();

次に、この列挙を反復して取得しZipEntry、ディレクトリであるかどうかを確認し、ディレクトリを作成するか、ファイルをそれぞれ抽出します。

于 2012-05-17T10:13:15.230 に答える