大阪近郊で活動するフリーランスエンジニアのブログです 技術情報とか趣味など

*

Java Zip圧縮後、元ファイルが削除できない

   

JavaでZip圧縮する際に少しハマったので備忘録

csvやpdfの一時ファイルを作成した後、zipファイルを作成
zip作成後に一時ファイルを削除しようとしたら削除できず、Java VMがずっとファイルを握っている状態になっていた

InputStreamをクローズするのではなく、InputStreamに渡したFileInputStreamを直接クローズしてやる必要があるみたい

/**
    * Zipファイル生成
    * @param zos ストリーム
    * @param files 書き込みファイル
    * @param charset 文字コード
    * @throws IOException IO例外
    */
private void compressZip(ZipOutputStream zos, List<File> files, String charset) throws IOException {

    // 圧縮レベル設定
    zos.setLevel(5);

    // 文字コードを指定
    zos.setEncoding(charset);

    byte[] buf = new byte[1024];
    InputStream is = null;
    try {
        for (File file : files) {
            ZipEntry entry = new ZipEntry(file.getName());
            zos.putNextEntry(entry);
            FileInputStream fis = new FileInputStream(file);
            is = new BufferedInputStream(fis);

            int len = 0;
            while ((len = is.read(buf)) != -1) {
                zos.write(buf, 0, len);
            }
            IOUtils.closeQuietly(fis); // ← newしたFileInputStreamを直接クローズする 
        }
    } finally {
        IOUtils.closeQuietly(is);
    }
}

 - Java, 備忘録 ,

  • このエントリーをはてなブックマークに追加
  • にほんブログ村 観賞魚ブログ 金魚へ

Comment

  1. 師子乃 より:

    初めまして。

    zipファイルの扱い方について、勉強させていただきます!

師子乃 へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

  関連記事

Raspberry Pi ZERO + L-03D + IIJmioを使ってネットに接続する

野外のソーラーパネル&ラズパイからネットに繋ぎたい ソーラーパネルで給 …

RaspberryPi2を使ったリモートのエサやりボタン復活しました

春がきた 春になり水温が上がってきたのでプラ舟ページのエサやりボタンを復活させま …

WordPressでモバイルの時はサイドウィジェットを非表示にしたい

私のブログ重すぎ・・・!? 外出先でモバイルから自分のブログ見るとサイドに置いて …

Raspberry Pi2でPlanexのGW-450Dが動かなくなった

Raspberry Pi2上で何も考えずソフト類をアップグレードしたらカーネルの …

Raspberry Pi ZEROでGW-450D2(無線LANドングル)を使う

ZERO買っちゃった Pimoroniで入荷しているのを見たのでRaspberr …