FileWriterのデフォルトコンストラクタなど、ファイルを自動で作成してくれる処理を行う時、先にファイルが存在していると上書きをしてしまう危険性がある。
ということで、java.io.Fileのexists()を使うことにした。
で、最初に思いついたのが
めんどうな例
public static void main(String[] args){
/**
args[0] = FileWriterのデフォルトコンストラクタで作成して
書き込む予定のファイル名(拡張子なし);
*/
String filename = args[0] + ".txt";
// カレントパスの取得とインスタンスの作成
String path = System.getProperty("user.dir");
File file = new File(path + "\\" + filename);
// exists()による判定
boolean flag = file.exists();
if (flag) {
System.out.println(filename + "は存在します。");
みたいにしなければいけないものと思っていた。
というのも、exists()の使い方を調べるとき、きっちりカレントパスを書いた例が多かったからである。そしてそれは、多分正しい。
だが、そもそもコマンドラインへの入力(args[0])の内容に依存するためはじめからファイル名を含んだカレントパスが用意できない上に、FileWriterでファイルを作成する前の下準備として、カレントディレクトリ内だけをチェックすれば良い場合、実は
すっきりした例
public static void main(String[] args){
String filename = args[0] + ".txt";
// インスタンスの作成
File file = new File(filename);
// exists()による判定(以下同じ)
boolean flag = file.exists();
if (flag) {
System.out.println(filename + "は存在します。");
これだけで十分だったのである。
というわけで、カレントパス + 探しているファイル名をexists()で検索するときは、Fileのコンストラクタにフルパスを入れなくとも、ファイル名だけ入れれば動く。