質問: new Alert(AlertType.ERROR); alert.setTitle("保存失敗"); alert.setHeaderText(null); alert.setContentText(textFile.getText()+ "に保存失敗しました"); } fw.close(); bw.close(); } }
回答: Javaプログラムに限らず一般的に「ファイルの書き込みが成功するか失敗するか」を実際に書き込みする前にチェックすることは完全には行えません。普通は書き込み処理を初めてそれが全て完了すれば「正常」途中で例外が起これば「失敗」とするのがよいと思います。 ``` public void handleButtonSaveAction(ActionEvent event) { try (FileWriter fw = new FileWriter(text); BufferedWriter bw = new BufferedWriter(fw)) { ...書き込み処理 } catch (IOException ex) { Alert alert = new Alert(AlertType.ERROR); alert.setTitle("保存失敗"); alert.setHeaderText(null); alert.setContentText(textFile.getText()+ "に保存失敗しました"); return; // returnする直前に自動的にcloseされます } // ここでは既にcloseされている Alert alert = new Alert(AlertType.INFORMATION); alert.setTitle("保存成功"); alert.setHeaderText(null); alert.setContentText(textFile.getText()+ "に保存しました"); } ``` なお、I/Oなどはtry-with-resource文を使って上のように書くとよいと思います。try-with-resourceのスコープから外れるとき(正常にせよエラーにせよ)自動的にcloseしてくれます。