- PR -

圧縮ファイル(tar.gz)内における複数ファイルの識別及び読み込み

1
投稿者投稿内容
もとき
会議室デビュー日: 2006/09/11
投稿数: 4
投稿日時: 2006-09-12 00:58
はじめての投稿です。よろしくお願いいたします。

圧縮ファイル(tar.gz)内において、複数のファイルが存在している状態で、
その圧縮ファイルを読み込み、その中からある特定のファイルを抜き出そうと考えています。

xxx.tar.gz --
|-- a001.txt
|-- b001.txt ← @
|-- c001.txt
|-- d001.txt ← A
|-- e001.txt

※上記の「@」と「A」が抜き出したいファイルです。

圧縮ファイル(tar.gz)の読み込みを行う手段としては、
GZIPInputStreamを使用してみましたが、その後streamをどのように解析をし、
特定のファイルのみを抜き出せばよいのか分かりません。

【環境】
OS :windowsXP
JDK:1.4.2.12

よろしくお願いいたします。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2006-09-12 09:28
該当のファイルはTAR形式で圧縮されたものを
さらにGZIP圧縮されているのではないですか?

まずはGZIPInputStreamで読み出したバイト列を
ファイルにでも書き出してみて、それがTAR形式として
解凍できるか試みてはいかがでしょうか。

Tarを解凍するためのライブラリは
http://jakarta.apache.org/commons/sandbox/compress/
で用意されているようですね。

http://jakarta.apache.org/commons/sandbox/compress/apidocs/org/apache/commons/compress/tar/TarInputStream.html

ちょっと調べてみてはいかがでしょうか。
もとき
会議室デビュー日: 2006/09/11
投稿数: 4
投稿日時: 2006-09-12 10:17
nagiseさん

返答ありがとうございます。
早速、試してみたいと思います。
また、結果を後ほど返答いたします。

ちなみに、tar.gzファイルは既に何かで作成されているファイルを
解析しようとしているので、nagiseさんの言うとおり、
一度どのような状態になっているか調べてみるのは良いかもしれませんね。
もとき
会議室デビュー日: 2006/09/11
投稿数: 4
投稿日時: 2006-09-13 12:35
nagiseさんに教えていただいたライブラリを用いて、解凍はできました。
ありがとうございます。

しかし、一点うまくいかない部分があります。
GZIPInputStreamで解凍した後、TarInputStreamで読み込みTarEntryを取り出しましたが、
そこからファイルを取得することができませんでした。
TarEntry#getFile()でファイルは取得できないのでしょうか?
※TarEntry#getName()で名称は取得できました。

よろしくお願いいたします。

[ メッセージ編集済み 編集者: もとき 編集日時 2006-09-13 12:36 ]
もとき
会議室デビュー日: 2006/09/11
投稿数: 4
投稿日時: 2006-09-19 10:16
(ちゃんとした方法か分かりませんが)
TarInputStreamのcopyEntryContentsメソッドを使用することによって、
必要なファイルのみFileオブジェクト化することができました。

ありがとうございました。
1

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