2011-11-03 10 views
6

コード:Javaでファイル/ディレクトリの存在を確認する適切な方法はありますか?

String dir = //Path to the directory 
File saveDir = new File(dir); 
//Here comes the existence check 
if(!saveDir.exists()) 
    saveDir.mkdirs(); 

コードのこの部分は、ファイルシステムに指定されたディレクトリ・パスとファイルを保存するために使用されます。保存する前に、私は指定された保存ディレクトリが存在するかどうかを確認したい。しかし、存在チェックは、私が望むように動作していないようです。 if節を削除しないと、目的のディレクトリは作成されません。私の問題を探している間、この面白いスタックの質問に出くわしました。 Alternative to File.exists() in Java。私はjava.ioにこの問題があることを理解しています。

ファイル操作中にディレクトリまたはリソースの存在をチェックする適切かつ安全な方法はありますか?

+0

多少関係はありませんが、注意している限り、おそらく 'isDirectory() 'もチェックしてください。 – Kevin

答えて

6

まあ、チェックが正しいだろう場合でも、あなたはディレクトリがまだ存在しているif条件がされていることを確認することはできません評価される。別のプロセスまたはユーザーは、それを作成または削除できます。とにかく、操作が失敗したかどうか(おそらく適切な例外をキャッチする)をチェックする必要があります。

あなたは小切手に頼るべきではなく、最悪の場合を常に想定してください。 (まあ、チェック不要な何かをやってからあなたを防ぐため、または確認などのためにユーザに尋ねるために有用である可能性がある。しかし、彼らはない保証何でもする。)

+0

答えをありがとう。コードの残りの部分は入出力ストリームでファイル保存操作を開始します。したがって、IOExceptionを処理またはスローする必要があります。しかし、私は既存のもののためのディレクトリ作成メソッドを呼び出すように私のコードにしたくない。 – fgakk

+0

@fga:ディレクトリが突然表示されたり消えたりすると、何か間違ったことが起こります。あなたのコードは正しく動作するはずです。すべてがうまくいくならば投げてはいけませんが、何かが起こったときの例外を処理する必要があります。したがって、ディレクトリが存在するかどうかは、通常のワークフローで機能するため、確認してください。しかし、このチェックは信頼できないので、例外がスローされないとは言えません。 – Vlad

27
new File(dir).getCanonicalFile().isDirectory(); 

あなたの参照のためのスケルトン: -

File f = new File("...."); 
if (!f.exists()) { 
    // The directory does not exist. 
    ... 
} else if (!f.isDirectory()) { 
    // It is not a directory (i.e. it is a file). 
    ... 
} 
+4

答えのもう一つの例は、受け入れられた答えではなく、より多くの票が役に立つことです。 – Amala

0

FileChannel.lock()あなたがいる限り、欲しいものだけを行いますこれは、JVMプロセスのかわりにファイル/フォルダのOSロックを要求するため、他のプロセスはそのディレクトリにアクセスできませんが、スレッドJVMで行うことができます。

1

mkdirsに電話してください。既存のディレクトリを上書きしないので、あなたのチェックは必要ありません(とにかく、信頼できません)。

関連する問題