これを行う方法はありますか?
私は非常に長い間反復しなければならないプログラムをコーディングしています、そしてそうしている間、それはファイルに書き込むことになっています。プログラムを手動で終了したらすぐにストリームを閉じたいのですが、そうすることで、ストリームが閉じられていないためにデータが失われるリスクを回避できます。例外処理でこれを行う方法があるはずですが、よくわかりません。どんな種類の提案も大歓迎です!
ありがとうございました
これを行う方法はありますか?
私は非常に長い間反復しなければならないプログラムをコーディングしています、そしてそうしている間、それはファイルに書き込むことになっています。プログラムを手動で終了したらすぐにストリームを閉じたいのですが、そうすることで、ストリームが閉じられていないためにデータが失われるリスクを回避できます。例外処理でこれを行う方法があるはずですが、よくわかりません。どんな種類の提案も大歓迎です!
ありがとうございました
主に:
try {
startapp();
} finally {
closeAll();
}
closeAll() では、安全なシャットダウンのために行うことを行います。finally ブロックのコードは、例外が発生した場合でも実行されます。
例外を使用してプログラムの実行を制御する方法は、設計が不十分です。シャットダウンフックを使用する方がはるかに良いでしょう。
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
// Close streams here
}
});
これにより、ほとんどの通常のシャットダウンが正常に処理されますが、ハード停止(SIGKILL)の場合、シャットダウンフックの実行は保証されません。しかし、それは、finallyブロックを介してストリームを閉じようとした場合よりも悪くはありません。
私は方法を発見しました!プログラムが終了するとストリームが自動的に閉じられることに気付かずに、これで多くの時間を失いました...
次のように、 write() メソッドの後に flush() メソッドを使用していなかったため、データは書き込まれませんでした。
out.write(line);
out.flush();
ご協力ありがとうございました