Javaでファイルを保存する際に、上書きの確認をする方法

自分自身で扱う専用のソフトを作る際は、あまり気にせず実装していませんでしたが、
色々な人に使ってもらうソフトの場合、ファイルの上書きの確認は必要だなーと思ったのでやり方メモ。

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」とします。

savedialog

そして、
「はい」の場合は break;
「いいえ」の場合は continue;
「取消」の場合は return;
とすることで、冒頭の項目1.~6.を実現することができました。

あとは、ファイル f に対して書き込み処理を行うだけです。

タイトルとURLをコピーしました