1. ホーム
  2. compression

[解決済み】ファイルをzip/unzipするための良いJavaライブラリは何ですか?[クローズド]

2022-04-16 18:13:57

質問

JDKに付属するデフォルトのZipライブラリとApacheの圧縮ライブラリを見てみましたが、3つの理由で不満があります。

  1. 肥大化し、APIの設計が悪い。私は 50行の定型的なバイト配列出力、zip入力、ストリームをファイル出力し、関連するストリームを閉じ、例外をキャッチし、バイトバッファを移動することを自分で書きます。 ? なぜ、次のようなシンプルなAPIではだめなのでしょうか? Zipper.unzip(InputStream zipFile, File targetDirectory, String password = null)Zipper.zip(File targetDirectory, String password = null) ということでしょうか?

  2. zipping unzippingでファイルのメタデータが破壊され、パスワードの処理が壊れているようです。

  3. また、私が試したすべてのライブラリは、UNIX で得られるコマンドラインの zip ツールに比べて 2-3 倍も遅かったのですが?

私にとっては(2)と(3)は小さなポイントですが、ワンラインインターフェースでテスト済みの良いライブラリが本当に欲しいのです。

どのように解決するのですか?

遅くなりましたが、たくさんの回答があります。 zip4j は、私が使ったことのあるzip用ライブラリの中で最も優れたものの1つです。シンプルで、パスワードで保護されたファイルを簡単に扱うことができます。

import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.core.ZipFile;


public static void unzip(){
    String source = "some/compressed/file.zip";
    String destination = "some/destination/folder";
    String password = "password";

    try {
         ZipFile zipFile = new ZipFile(source);
         if (zipFile.isEncrypted()) {
            zipFile.setPassword(password);
         }
         zipFile.extractAll(destination);
    } catch (ZipException e) {
        e.printStackTrace();
    }
}

Mavenの依存関係は。

<dependency>
    <groupId>net.lingala.zip4j</groupId>
    <artifactId>zip4j</artifactId>
    <version>1.3.2</version>
</dependency>