- PR -

GZIPファイルの解凍

1
投稿者投稿内容
しま太郎
常連さん
会議室デビュー日: 2006/08/22
投稿数: 39
投稿日時: 2007-04-12 21:19
GZIPファイルの解凍について、質問させてください。
現在下記のコードで解凍はできているのですが、解凍後のファイルの名前に困っています。
[現状]
"sample.gz"ファイル内に"aaa.txt"というテキストがあるということにして解凍だけは出来ています。
[目的]
本番では、解凍されたファイルは、元の圧縮ファイル内にあるファイル名そのままのものにテキストデータが書き込まれている状態にしたいと思っています。
(このサンプルでは、どの圧縮ファイルがきても、解凍されたファイル名は"aaa.txt"固定となってしまいます。)

(例)
 圧縮ファイル"aaa.gz"内には"111.txt"がある
  →解凍後のファイル名は"111.txt"

 圧縮ファイル"bbb.gz"内には"222.txt"がある
  →解凍後のファイル名は"222.txt"


元のテキストデータのファイル名(例では"111.txt"または"222.txt")取得方法をご存知の方がいらっしゃいましたら、恐縮ですがご教授よろしくお願いいたします。

====================================================================
(ソース抜粋)
try {
String origName = "C:\sample.gz";
File file = new File( origName);
BufferedInputStream bis
= new BufferedInputStream(
new GZIPInputStream(
new FileInputStream( file ) ) );

String bodyName = "C:\aaa.txt";
BufferedOutputStream bos
= new BufferedOutputStream(
new FileOutputStream(
new File( bodyName ) ) );

int c;
while( ( c = bis.read() ) != -1 ) {
bos.write( (byte)c );
}

bis.close();
bos.close();

}catch( Exception e ){

}
====================================================================
加納正和
ぬし
会議室デビュー日: 2004/01/28
投稿数: 332
お住まい・勤務地: 首都圏
投稿日時: 2007-04-12 21:51
引用:

しま太郎さんの書き込み (2007-04-12 21:19) より:
GZIPファイルの解凍について、質問させてください。
現在下記のコードで解凍はできているのですが、解凍後のファイルの名前に困っています。



おそらく、アーカイバと圧6縮をごちゃまぜにしているかと。gzipはzipではありません。
gzipは純粋にデータを圧縮するだけ。ファイルをアーカイブしません。

zip = アーカイバ+圧縮(unzipはその逆)
gzip = 圧縮

です。だからgzipにはファイルを取り出す機能はありません。UNIXで使う場合は
tar(アーカイバ)と組み合わせます。

スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2007-04-12 23:40
gzipされたファイルに元のファイル名を記録することができますが(記録されてないこともある)、GZIPInputStream を使おうとするとファイル名を取り出す手段がなさそうですね。

gzip のファイル構造を調べて、Inflater を使って伸長させればできるのかもしれません。
しま太郎
常連さん
会議室デビュー日: 2006/08/22
投稿数: 39
投稿日時: 2007-04-13 11:04
加納さん、スフレさん、ご回答頂き、ありがとうございました。
どうも考え違いをしていたようですね。。
gzipもzipも同じようなものだと思い込んでいました…

".tar.gz"で再度調べてみたいと思います。
(こちらだとファイル名取得も出来そうなので。)

お教えいただき、ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)