※J2SE 1.4.2 で動作確認
■JavaでZIP圧縮
JavaでZIP圧縮ができないか?
圧縮なんてぜんぜん知りません。
圧縮・解凍ツールでファイルを圧縮したり、解凍する事はありますが、
Javaで作る・・・なんてできるのだろうか?
圧縮アルゴリズムから組むのか?とビクビクしました。
よくよく聞いてみると、提供されている 「java.util.zip」で実現できるとの事。
ならばと、サンプルコードを検索してみました。
【たけおばの門 - 圧縮ファイルを扱う】
http://takeoba.cool.ne.jp/moreJava/compression.htm
サンプルコードを組み込み、ファイルを圧縮できました。
圧縮まではできたのですが・・・
解凍ができない!
正確には「解凍できるツール」と、「解凍できないツール」が出てきました。
解凍できたツール: 解凍レンジ
解凍できなかったツール: Lhaplus
なんで?どうして??
どうも圧縮前に3つ、値を設定しなければいけないようだ。
設定する値とは、
・圧縮前のファイルサイズ
・圧縮後のファイルサイズ
・CRC-32の値
である。
圧縮前のサイズと、CRC-32は計算から取得できるが、
圧縮後のサイズ?
圧縮前に圧縮後のサイズを設定するの?
調べてみるが、圧縮後のサイズを取得するメソッドが見当たらない。
どないせーちゅうねん。
再度、ネットを検索。
サンプルソースを発見
【ZipOutputStream と ZipInputStream の扱い方サンプル。】
http://homepage3.nifty.com/akaho/program/java/zip/
圧縮後には、ファイルサイズを取得できるので、
「圧縮後のサイズ」の値を取得する為、圧縮し、
「圧縮後のサイズ」を設定して再度、圧縮する。
という手法をしている。
たしかに取得できるが、2度圧縮ロジックが走るのが
スッキリしない。
また、2度目は失敗した。との記述も気になる。
再度、何かないかネットを検索。
【ZipTool.java(海外)】
http://threebit.net/projects/sosc/current/sosc/doc/doxygen/html/ZipTool_8java-source.html
これかな・・・
「OutputStream」をオーバーライドして圧縮後のサイズを取得してるのか。
上記のソースを参考に、ロジックを作成。
ファイル圧縮後、無事、解凍できました。
ただし、上記のソースは、ライセンス「GPL」を使ってるので、参考程度で。
■参考リンク
【たけおばの門】
http://takeoba.cool.ne.jp/index.shtml
【Vector - 解凍レンジ】
http://www.vector.co.jp/vpack/browse/pickup/pw5/pw005284.html
【Vector - Lhaplus】
http://www.vector.co.jp/magazine/softnews/001209/n0012091.html
【IT用語辞典 e-Words - GPL】
http://e-words.jp/w/GPL.html
■JavaでZIP圧縮
JavaでZIP圧縮ができないか?
圧縮なんてぜんぜん知りません。
圧縮・解凍ツールでファイルを圧縮したり、解凍する事はありますが、
Javaで作る・・・なんてできるのだろうか?
圧縮アルゴリズムから組むのか?とビクビクしました。
よくよく聞いてみると、提供されている 「java.util.zip」で実現できるとの事。
ならばと、サンプルコードを検索してみました。
【たけおばの門 - 圧縮ファイルを扱う】
http://takeoba.cool.ne.jp/moreJava/compression.htm
サンプルコードを組み込み、ファイルを圧縮できました。
圧縮まではできたのですが・・・
解凍ができない!
正確には「解凍できるツール」と、「解凍できないツール」が出てきました。
解凍できたツール: 解凍レンジ
解凍できなかったツール: Lhaplus
なんで?どうして??
どうも圧縮前に3つ、値を設定しなければいけないようだ。
設定する値とは、
・圧縮前のファイルサイズ
・圧縮後のファイルサイズ
・CRC-32の値
である。
圧縮前のサイズと、CRC-32は計算から取得できるが、
圧縮後のサイズ?
圧縮前に圧縮後のサイズを設定するの?
調べてみるが、圧縮後のサイズを取得するメソッドが見当たらない。
どないせーちゅうねん。
再度、ネットを検索。
サンプルソースを発見
【ZipOutputStream と ZipInputStream の扱い方サンプル。】
http://homepage3.nifty.com/akaho/program/java/zip/
圧縮後には、ファイルサイズを取得できるので、
「圧縮後のサイズ」の値を取得する為、圧縮し、
「圧縮後のサイズ」を設定して再度、圧縮する。
という手法をしている。
たしかに取得できるが、2度圧縮ロジックが走るのが
スッキリしない。
また、2度目は失敗した。との記述も気になる。
再度、何かないかネットを検索。
【ZipTool.java(海外)】
http://threebit.net/projects/sosc/current/sosc/doc/doxygen/html/ZipTool_8java-source.html
これかな・・・
「OutputStream」をオーバーライドして圧縮後のサイズを取得してるのか。
上記のソースを参考に、ロジックを作成。
ファイル圧縮後、無事、解凍できました。
ただし、上記のソースは、ライセンス「GPL」を使ってるので、参考程度で。
■参考リンク
【たけおばの門】
http://takeoba.cool.ne.jp/index.shtml
【Vector - 解凍レンジ】
http://www.vector.co.jp/vpack/browse/pickup/pw5/pw005284.html
【Vector - Lhaplus】
http://www.vector.co.jp/magazine/softnews/001209/n0012091.html
【IT用語辞典 e-Words - GPL】
http://e-words.jp/w/GPL.html