自分自身で扱う専用のソフトを作る際は、あまり気にせず実装していませんでしたが、
色々な人に使ってもらうソフトの場合、ファイルの上書きの確認は必要だなーと思ったのでやり方メモ。
1. ファイルチューザで保存先を選択し、
2. 同じ名前のファイルが存在していた場合、
3. 「はい」「いいえ」「取消」の選択するダイアログボックスを出し、
4. 「はい」の場合は上書き保存、
5. 「いいえ」の場合は再びファイルチューザを表示、
6. 「取消」の場合はダイアログボックスを閉じる、
というプログラムにしてみます。
実際に書いたコードは次のとおり。
JFileChooser fc = new JFileChooser(System.getProperty("user.dir")); File f; while (true) { if (fc.showSaveDialog(this) != JFileChooser.APPROVE_OPTION) { return; } f = fc.getSelectedFile(); if (f.exists()) { switch (JOptionPane.showConfirmDialog(this, f.getName() + " は既に存在します。\n上書きしますか?", "上書き保存の確認", JOptionPane.YES_NO_CANCEL_OPTION)) { case JOptionPane.YES_OPTION: break; case JOptionPane.NO_OPTION: continue; case JOptionPane.CANCEL_OPTION: return; } break; } else { break; } } // 以下、ファイル f に書き込む処理
こんな感じで出来ました。
以下、簡単なコードの解説を記します。
1行目で、ファイルチューザ(ファイル保存ダイアログ)のインスタンス fc を生成しています。
コンストラクタ引数でファイルチューザの初期ディレクトリを指定することができ、
「System.getProperty(“user.dir”)」とすると実行ファイルのディレクトリが指定されます。
3行目で while ループに入り、4行目でファイルチューザ(ファイル保存ダイアログ)を表示させます。
「保存」ボタンではなく「取消」ボタンが押された場合、return で終了させています。
「保存」ボタンが押された場合、7行目で選択されたファイルを取得し、
8行目で exist() メソッドを用い、ファイルの存在確認を行います。
ファイルが存在していない場合は break; でループから抜け、
ファイルが存在する場合は、9~11行目で確認ダイアログボックスを出します。
JOptionPane.showConfirmDialog() メソッドの第4引数では、確認用のボタンを指定することができ、
「はい」「いいえ」「取消」の3つのボタンを表示させたい場合は、「JOptionPane.YES_NO_CANCEL_OPTION」とします。
そして、
「はい」の場合は break;
「いいえ」の場合は continue;
「取消」の場合は return;
とすることで、冒頭の項目1.~6.を実現することができました。
あとは、ファイル f に対して書き込み処理を行うだけです。