JavaのZipOutputStreamでデータ圧縮

Javaにはデータを圧縮しZIPファイルにすることが出来るライブラリZipOutputStreamがあります。

当ライブラリを使用して、データを読み込んで圧縮しZIPファイルを作成するサンプルコードを書いてみました。

/** データ読み込み.
* サンプルファイルを読み込んでデータを返却する
*/
private byte[] getFileData() {

  // 入力ファイル
  Path path = Paths.get("test.txt");
  // 入力ファイルの中身
  byte[] inputFileData = null;
  
  try {
    // 読み込み
    inputFileData = Files.readAllBytes(path);
  } catch (IOException e) {
    System.out.println("読み込み失敗");
    e.printStackTrace();
  }

  return inputFileData;
}

/**
* ZIP作成.
* 引数で渡されたデータをZIPにまとめる
*/
private boolean createZip(byte[] inputFileData) {

  // 文字コード
  Charset charset = Charset.forName("MS932");
  // 出力ファイル
  String outputZipName = "output.zip";
  String outputFileName = "output.txt";
  
  try {
    // Stream作成
    FileOutputStream fos = new FileOutputStream(outputZipName);
    BufferedOutputStream bos = new BufferedOutputStream(fos);
    ZipOutputStream zos = new ZipOutputStream(bos, charset);

    // zipファイル内にファイル作成
    zos.putNextEntry(new ZipEntry(outputFileName));

    // データ書き込み
    zos.write(inputFileData);

    // Close
    zos.closeEntry();
    zos.close();
  } catch (IOException e) {
    e.printStackTrace();
  }
  return true;
}

サンプルコードをSpring Bootプロジェクトに組み込んで実行してみると、このようにプロジェクト親フォルダ直下にtest.zipが出力されます。

* 上記サンプルコード実行するにはプロジェクト親フォルダ直下にtest.txtが必要です。

参考

ZipOutputStream – Java SE8 docs Oracle