こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ファイル操作時のclose処理の失敗とは?

ファイル操作時のclose処理の失敗とは?

とりあえず具体的な例を挙げますとFileOutputStreamのclose時。
このときに発生する例外とはどんなケースだろう、
例外が発生したときにはどんな対処をすべきだろうと考えましたが、
発生しうるケースが分かりませんでしたし、
catchに記述すべき処理がわかりませんでした。


JavaDocには以下のように記述されています。
「IOException - 入出力エラーが発生した場合」
意味が分かりません…。考えるのが面倒なので手抜を抜いた感があります。

FileOutputStream (Java 2 プラットフォーム SE v1.4.0)
http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/io/FileOutputStream.html
FileOutputStream (Java 2 Platform SE 5.0)
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/io/FileOutputStream.html
FileOutputStream (Java Platform SE 6)
http://java.sun.com/javase/ja/6/docs/ja/api/java/io/FileOutputStream.html


バッファ書込みをするクラスの場合には、ディスクの容量が足りなくて
close処理時に書込みが失敗して例外発生、ということは
十分にありうると思います。しかしFileOutputStreamでは関係ありません。

デバッガで、途中で処理を止めclose前に処理を終了させてしまっても
問題は生じませんでした(WindowsXP上では)。

質問は以下です。
・ファイル出力処理のclose時に例外が発生するのはどのような環境・ケースか
・例外が発生した場合にはどんな処理をすべきか(ログ出力以外で)

よろしくお願いします。

投稿日時 - 2010-04-13 12:16:25

QNo.5822891

暇なときに回答ください

質問者が選んだベストアンサー

>close処理時に書込みが失敗して例外発生、ということは
>十分にありうると思います。しかしFileOutputStreamでは関係ありません。

なんで関係無いって言える?

クラスがバッファ書き込みをしなくたって、OSレベルでバッファリングしていたり、デバイスドライバレベルでバッファリングしていたり、BIOSレベルでバッファリングしていたら、closeの呼び出しでバッファをフラッシュしようとしてデバイスに書き込めなくて失敗する事がある。

「FileOutputStreamではバッファリングが関係ない」と断言出来るのは、アプリレベルでも、OSレベルでも、デバイスドライバレベルでも、BIOSレベルでも、バッファ無しで書き込みし、一切バッファリングしないように設定した時、だけだろう。

「ハードウェアの安全な取り外し」が何の為にあるのか考えてみるべし。

>・ファイル出力処理のclose時に例外が発生するのはどのような環境・ケースか

「アプリレベル以外の下層レベルで、誰かがバッファリングをしていて、close呼び出しによりバッファフラッシュを行ってみたら、書き出しに失敗してバッファをフラッシュ出来なかった場合」に発生する。

>・例外が発生した場合にはどんな処理をすべきか(ログ出力以外で)

「該当ファイルの削除を試みる」であろう。

投稿日時 - 2010-04-13 13:24:03

お礼

なるほど。参考になりました。
ありがとうございました。

投稿日時 - 2010-04-30 12:26:17

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問