- PR -

ZIPファイル圧縮について

投稿者投稿内容
coasm
大ベテラン
会議室デビュー日: 2001/11/26
投稿数: 237
投稿日時: 2004-06-22 00:44
> org.apache.tools.zip.ZipFileクラスに
> 方法はZipEntryのEnumeration取り出して
> ZipFileにZipEntryを引数にしてファイル毎の解凍されたInputStreamがとりだせます。

おおっ!
何時のまにかこんなクラスが増えてたんですね。
御指摘くださって、ありがとうございます。
やはり、こまめにバージョンアップしとかないとダメですね。

# さっき調べてみたら、自宅のマシンに入ってるantは1.5.4でした。
# これではイカンわな(苦笑)
えれ
会議室デビュー日: 2004/06/18
投稿数: 10
投稿日時: 2004-06-27 15:14
coasmさん
いっきゅう さん

大変ありがとございました。
今回の件は パッケージの差替えで上手く行えました。
以下に実際の圧縮部分の改訂版のソースを記載します。

private void compressFile(File file, File zipfile)
throws FileNotFoundException, IOException
{
try {

//ファイルシステムの実際のファイルに接続
FileInputStream fis = new FileInputStream(file);
//引数の入力ストリームを後で使用できるように保存
BufferedInputStream bis = new BufferedInputStream(fis);

//ファイルに書き込むためのファイル出力ストリームを作成します
FileOutputStream fos = new FileOutputStream(zipfile);
//新しい ZIP 出力ストリームを作成します
ZipOutputStream zos = new ZipOutputStream(fos);
zos.setMethod(ZipOutputStream.DEFLATED);
//指定された名前で新しい zip エントリを作成します
int ind = file.getPath().lastIndexOf('/');
String zipTemp = file.getPath().substring(ind + 1, file.getPath().length());

ZipEntry target = new ZipEntry(zipTemp);
zos.putNextEntry(target);

int file_length = (int) file.length();
byte buf[] = new byte[file_length];

//0KBのファイルを圧縮しようとした場合
if (file_length == 0) {
zos.write(buf, 0, buf.length);
}
//nKBのファイルを圧縮しようとした場合
else {
int count;
while ( (count = bis.read(buf, 0, file_length)) != EOF) {
zos.write(buf, 0, buf.length);
}
}

bis.close(); // fis より先にクローズすること
fis.close();
zos.closeEntry();
zos.close(); // fos より先にクローズすること
fos.close();

}

最終的にはこのような形で関数を実装しなおしました。
これだと、ツールからのエラーもなく正常に行えました。

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

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