アプリ版:「スタンプのみでお礼する」機能のリリースについて

ファイル圧縮について質問させてください。
以下のようなメソッドを作成したのですが、

public run(String strFiles[], String strZipFileName) {

inti = 0;
int iLen = 0;
FileInputStream fis = null;
FileOutputStream fos = null;
ZipOutputStream zos = null;
ZipEntry zent = null;
byte[] buf = new byte[1024*10*10];

try {

fos = new FileOutputStream(strZipFileName);
zos = new ZipOutputStream(fos);

for (i = 0; i < strFiles.length(); i++) {

fis = new FileInputStream(strFiles[i]);
zent = new ZipEntry(strFiles[i]);
zos.putNextEntry(zent);

while (-1 != (iLen = fis.read(buf))) {
zos.write(buf, 0, iLen);
}

zos.flush();
zos.closeEntry();

fis.close();
}

} catch(Exception e) {
System.err.println(e);
} finally {
try {
zos.close();
// ※1
fos.close();
// ※2
} catch(Exception e) {
System.err.println(e);
}
}
}

サイズの小さいファイルや、
特定のサイズのファイル(13k程度)を対象とした時、
高い確率で、空の圧縮ファイルが作成される事があります。

ログを出力しながら確認すると、このような現象が起きた場合、
圧縮ファイルをcloseする直前(※1)では作成されたファイルはサイズがあるのですが、
圧縮ファイルをcloseした直後(※2)ではファイルのサイズが0になってしまいます。
また、2台あるサーバの内、1台だけでこの現象が起こっています。

javaのバージョンは1.3です。

何故このような現象が起こってしまうのか、
ご存知の方がいらっしゃいましたら教えていただけないでしょうか。
宜しくお願いします。

A 回答 (2件)

実は、その現象3,4年前に自分も同じように苦しんだ記憶が


あります。
結局、原因がわからず、何か他の対策をして逃げたんですが、、
最後は、何やったか、よく憶えてません(--;
色々やったんで、、。

たぶん、ファイルが消える場合は
dummy.txtみたいな余分なファイルをzipに入れて
解決?した気がする、、。
(複数ファイルなら消える現象が起こらなかった、、はず)
まあ、昔の記憶なのでハッキリ憶えてません。
(コードも無いです)

何にせよ、仕様って事で許してもらいました(=-=;
    • good
    • 0
この回答へのお礼

ありがとうございます。

サーバを再起動したら現象が発生しなくなりました。
結局原因はわからぬままですが、
サーバ自体にも問題があったようです(win2003server)

どちらにせよ、close処理が正常に行われなかったので
例外かエラーが発生しても良いと思うのですが・・・。

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

お礼日時:2005/09/28 00:13

まったく関係ないかもしれませんが(=w=;



http://java.sun.com/j2se/1.3/ja/ReleaseNotes.htm …

#4764567

この現象で、アプリ自体が落ちて正常にcloseされなかったため、ファイルが消えたとか、。

この回答への補足

ありがとうございます。
拝見させていただきました。

OutputStream.close() メソッドの潜在バグ、
結果としてアプレットがハングアップしてしまうと記載されているので、直接関係は無さそうなのですが、
akanekorさんの仰る通り、このバグの影響でclose処理が上手く機能していない可能性もありそうですね。
詳細なバージョンを確認してみることにします。

補足日時:2005/09/26 23:57
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!