web-dev-qa-db-ja.com

ファイルがJavaに存在するかどうかをどうやって確認するのですか?

Javaで読み込むために開く前に、ファイルが存在するかどうかを確認するにはどうすればよいですか。 (Perlの-e $filenameと同等).

唯一の SO に関する同様の質問は、ファイルの書き込みを扱っているため、FileWriterを使用して回答されましたが、明らかにここでは適用されません。

可能であれば、「ファイルを開いてテキスト内で「ファイルなし」をチェックする例外が発生したときにキャッチするためのAPIの呼び出し」とは対照的に、true/falseを返す本物のAPI呼び出しをお勧めします。後者。

760
DVK

Java.io.File :を使う

File f = new File(filePathString);
if(f.exists() && !f.isDirectory()) { 
    // do something
}
1237

isFile()の代わりにexists()を使うことをお勧めします。ほとんどの場合、パスがファイルを指しているかどうかだけでなく、そのパスがファイルを指しているかどうかを確認します。パスがディレクトリを指す場合、exists()はtrueを返すことを忘れないでください。

new File("path/to/file.txt").isFile();

new File("C:/").exists()はtrueを返しますが、ファイルとして開いたり読み込んだりすることはできません。

398
Chris Dail

Java SE 7でnioを使用すると、

import Java.nio.file.*;

Path path = Paths.get(filePathString);

if (Files.exists(path)) {
  // file exist
}

if (Files.notExists(path)) {
  // file is not exist
}

ExistsとnotExistsの両方がfalseを返す場合、ファイルの存在は確認できません。 (おそらくこの道へのアクセス権なし)

パスがディレクトリか通常のファイルかを確認できます。

if (Files.isDirectory(path)) {
  // path is directory
}

if (Files.isRegularFile(path)) {
  // path is regular file
}

Java SE 7チュートリアル をチェックしてください。

129
Wonil

Java 8を使用する場合

if(Files.exists(Paths.get(filePathString))) { 
    // do something
}
39
Wendel
File f = new File(filePathString); 

これは物理ファイルを作成しません。 Fileクラスのオブジェクトを作成するだけです。ファイルを物理的に作成するには、明示的に作成する必要があります。

f.createNewFile();

そのため、f.exists()を使用して、そのようなファイルが存在するかどうかを確認できます。

27
rizwan
f.isFile() && f.canRead()
24
jhumble

以下を使用することができます:File.exists()

14
Francis Upton

googleで「Javaファイルが存在する」という最初のヒット:

import Java.io.*;

public class FileTest {
    public static void main(String args[]) {
        File f = new File(args[0]);
        System.out.println(f + (f.exists()? " is found " : " is missing "));
    }
}
14
just somebody

これを実現するには複数の方法があります。 

  1. 存在のためだけの場合。ファイルでもディレクトリでもかまいません。 

    new File("/path/to/file").exists();
    
  2. ファイルをチェック

    File f = new File("/path/to/file"); 
      if(f.exists() && f.isFile()) {}
    
  3. ディレクトリを確認してください。

    File f = new File("/path/to/file"); 
      if(f.exists() && f.isDirectory()) {}
    
  4. Java 7の方法 

    Path path = Paths.get("/path/to/file");
    Files.exists(path)  // Existence 
    Files.isDirectory(path)  // is Directory
    Files.isRegularFile(path)  // Regular file 
    Files.isSymbolicLink(path)  // Symbolic Link
    
13
Raghu K Nair

しないでください。 FileNotFoundException.をキャッチするだけです。ファイルシステムは、ファイルが存在するかどうかをテストする必要があります。これらすべてを2回行うことには意味がありません。

  • コードを2倍にする
  • テスト時には存在するがオープン時には存在しないというタイミングウィンドウの問題、または その逆、 および
  • この質問の存在が示すように、あなたは間違ったテストをし、間違った答えを得るかもしれないという事実。

システムを考え直そうとしないでください。それは知っています。そして未来を予測しようとしないでください。一般的に any リソースが利用可能かどうかをテストする最良の方法はそれを使うことです。

9
user207421

私にとっては、Sean A.Oによって受け入れられた回答の組み合わせです。ハーニーとその結果Cort3zによるコメントが最善の解決策のようです。

次のスニペットを使用しました:

File f = new File(filePathString);
if(f.exists() && f.isFile()) {
    //do something ...
}

これが誰かに役立つことを願っています。

8
X-Fate

Commons FileUtils https://commons.Apache.org/proper/commons-io/javadocs/api-2.5/org/Apache/commons/io/FileUtils.html [。 ]これにはファイルを管理するための追加の方法があり、多くの場合JDKより優れています。

4

私はこのスレッドが少し遅れていることを知っています。しかし、これが私の答えです。Java7以降で有効です。

次のスニペット

if(Files.isRegularFile(Paths.get(pathToFile))) {
    // do something
}

fileが存在しない場合、メソッドisRegularFilefalseを返すので、これは完全に満足できるものです。したがって、Files.exists(...)かどうかをチェックする必要はありません。

他のパラメータは、リンクの処理方法を示すオプションです。デフォルトでは、シンボリックリンクがたどられます。

Java Oracleのドキュメントから

4
avi.elkharrat

たとえば、ファイルディレクトリがあり、それが存在するかどうかを確認したい場合

File tmpDir = new File("/var/tmp");

boolean exists = tmpDir.exists();

ファイルが存在しない場合、existsはfalseを返します。

ソース: https://alvinalexander.com/Java/java-file-exists-directory-exists

3
ID127898

良いコーディング慣行とすべてのケースをカバーする簡単な例:

 private static void fetchIndexSafely(String url) throws FileAlreadyExistsException {
        File f = new File(Constants.RFC_INDEX_LOCAL_NAME);
        if (f.exists()) {
            throw new FileAlreadyExistsException(f.getAbsolutePath());
        } else {
            try {
                URL u = new URL(url);
                FileUtils.copyURLToFile(u, f);
            } catch (MalformedURLException ex) {
                Logger.getLogger(RfcFetcher.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(RfcFetcher.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

での参照とその他の例

https://zgrepcode.com/examples/Java/java/nio/file/filealreadyexistsexception-implementations

2
Amandeep Singh

ディレクトリのFileをチェックしたい場合はdir

String directoryPath = dir.getAbsolutePath()
boolean check = new File(new File(directoryPath), aFile.getName()).exists();

そしてcheckの結果をチェックする

1
user3618182

ファイルが存在するかどうかをチェックするFile.exists()は、チェック操作ステータスを示すブール値を返します。ファイルが存在する場合はtrue。存在しない場合はfalseです。

File f = new File("c:\\test.txt");

if(f.exists()){
    System.out.println("File existed");
}else{
    System.out.println("File not found!");
}
1
KIBOU Hassan
new File("/path/to/file").exists(); 

トリックをします

1
user4833142

StringではFileコンストラクターを使用しないでください。
これはうまくいかないかもしれません! 
この代わりにURIを使います。

File f = new File(new URI("file:///"+filePathString.replace('\\', '/')));
if(f.exists() && !f.isDirectory()) { 
    // to do
}
1
iviorel

次のコードを使って確認できます。

import Java.io.File;
class Test{
    public static void main(String[] args){
        File f = new File(args[0]); //file name will be entered by user at runtime
        System.out.println(f.exists()); //will print "true" if the file name given by user exists, false otherwise

        if(f.exists())
        {
             //executable code;
        }
    }
}
0
Pankti

このようにすることができます

import Java.nio.file.Paths;

String file = "myfile.sss";
if(Paths.get(file).toFile().isFile()){
    //...do somethinh
}
0
Rodrigo Pavan

これらのメソッドを設計する特定の目的があります。ファイルの存在を確認するために誰かを使用することはできません。

  1. isFile():この抽象パス名で示される file が通常のファイルかどうかをテストします。
  2. exists():この抽象パス名で示される ファイルまたはディレクトリ が存在するかどうかをテストします。 docs.Oracle.com
0
Atul Jain