★★Java質問・相談スレッド153★★

このエントリーをはてなブックマークに追加
989デフォルトの名無しさん
ちょっと困っているので質問させて下さい。

1) ZIPファイル解凍(中に複数のテキストファイルあり)
2) 解凍した複数のテキストファイルを読込みながらDBへINSERT

するjavaプログラムがあるのですが、
ほとんどの場合、正常に動作し、中のテキストファイルが全てDBに取り込まれるのですが、
まったく同じZIPを相手にしているのに、時たま1、2ファイル抜け落ちてしまうことがあります。

ただしその場合でもプログラムは正常終了しています。
ログを仕込んで調査した結果、
1)はちゃんと全ファイル解凍しに行っています。
2)も1)で対象になった全ファイル読込み対象にしに行っています。
なのに1、2ファイル抜け落ちてしまうことがあるのです。

なので、考えられるのは、1)でZIPを解凍する際、
1-1) ZIPファイルのエントリリスト取得(java.util.zip.ZipEntry)
1-2) 1-1)のリストのファイルをBufferedInputStream#readで読込み
1-3) 1-2)をFileOutputStream#writeで解凍先へ書込み
のうち、1-3)のFileOutputStream#writeが非同期になっている(書込み完了を待っていない)
もしくはOSの遅延書込みが原因かと思っています。

javaで書込み完了を待つ、もしくはOSの遅延書込みを待つ等の制御は可能なのでしょうか?
または別の原因でしょうか?
このあたりに詳しい方、アドバイスお願いします!m(_ _)m

ちなみにOSはWindowsXPで、Java1.4.2です。
ソースが必要でしたら晒すことも可能です!