ウィキっとく? java > zip


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

javaのzip圧縮

  • javaのzip圧縮/解凍では以下のどちらかのパッケージが使用できる。
    しかし、下記の文字化けの問題で org.apache.tools.zip を使う必要がある。
    1. java.util.zip (標準)
    2. org.apache.tools.zip (apacheAnt)

ハマったところ

文字化け

  • 原因:
    • java.util.zip はUTF-8固定のため。
  • 対策:
    • org.apache.tools.zip を使用する。
      ZipOutputStream#setEncoding() メソッドでエンコード指定が可能。

WindowsXP 標準の Compressed (zipped) Folder で空フォルダがファイルに見える。

  • 原因:
    • 不明。ダブルクリックしてみるとフォルダ扱いになっている。
  • 対策:
    • 不明。解凍すると正しくフォルダになる。
      どなたかご存知の方いましたらご教授よろしくお願いします。

解凍時、エラーが発生

  • 原因:
    • ヘッダのCRC,サイズを見る解凍ツールの問題?
      ヘッダにCRC,サイズが入ってないとエラーになる解凍ツールがあるらしい
  • 対策:
    • ランダムファイルアクセス使用で圧縮し、自動的にヘッダにCRC,サイズ等を書き込む。 or
      1回仮圧縮をしてサイズを計り、2回目で本圧縮時にヘッダに設定する。 or
      ヘッダのサイズを見てエラーを吐く解凍ツールを使わない。(難

zipフォーマット仕様

CRC, 圧縮サイズ, 解凍時サイズの設定について

  • 上記3つの設定箇所はエントリポイントのヘッダとフッタにある。
  • 圧縮サイズは圧縮後にしかわからないため、1回サイズ測定用に仮圧縮し、2回目の本圧縮時にサイズを設定する必要がある。
    しかし、以下の場合は内部で自動計算し、ヘッダに戻って設定してくれるので設定不要。
    • org.apache.tools.zip.ZipOutputStream では Method=DEFLATED(圧縮)かつ seekable (ランダムアクセスファイル)の場合のみ
  • ランダムアクセスファイル使用方法

コメント

  • 間違い、ご意見などありましたらよろしくお願いします。
    名前:
    コメント: