26

私がこれを行う場合:

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

if (f.exists()) {
    System.out.println("File exists");
} else {
    System.out.println("File not found!");
}

次に、ファイルが作成され、常に「ファイルが存在します」が返されます。ファイルを作成せずにファイルが存在するかどうかを確認することはできますか?

編集:

forループにあることを忘れました。だからここに本物があります:

for (int i = 0; i < 10; i++) {
    File file = new File("c:\\text" + i + ".txt");
    System.out.println("New file created: " + file.getPath());
}
4

4 に答える 4

54

をインスタンス化するときはFile、ディスク上に何も作成せず、のようないくつかのメソッドを呼び出すことができるオブジェクトを構築するだけですexists()

これは問題なく安価です。このインスタンス化を避けようとしないでください。

Fileインスタンスには2つのフィールドしかありません。

private String path;
private transient int prefixLength;

そして、ここにコンストラクターがあります:

public File(String pathname) {
    if (pathname == null) {
        throw new NullPointerException();
    }
    this.path = fs.normalize(pathname);
    this.prefixLength = fs.prefixLength(this.path);
}

ご覧のとおり、Fileインスタンスはパスのカプセル化にすぎません。呼び出すためにそれを作成することはexists()続行する正しい方法です。それを最適化しようとしないでください。

于 2012-07-02T10:24:14.050 に答える
12

Java 7以降では、次のものを使用できますjava.nio.file.Files.exists

Path p = Paths.get("C:\\Users\\first.last");
boolean exists = Files.exists(p);
boolean notExists = Files.notExists(p);

if (exists) {
    System.out.println("File exists!");
} else if (notExists) {
    System.out.println("File doesn't exist!");
} else {
    System.out.println("File's status is unknown!");
}

Oracleチュートリアルでは、これに関する詳細を見つけることができます。

クラス内のメソッドPathは構文的です。つまり、Pathインスタンスを操作します。Pathただし、最終的にはファイルシステムにアクセスして、特定のファイルが存在するかどうかを確認する必要があります。exists(Path, LinkOption...)notExists(Path, LinkOption...)メソッドを使用してこれを行うことができます。!Files.exists(path)と同等ではないことに注意してくださいFiles.notExists(path)。ファイルの存在をテストする場合、次の3つの結果が考えられます。

  • ファイルが存在することが確認されます。
  • ファイルが存在しないことが確認されました。
  • ファイルのステータスは不明です。この結果は、プログラムがファイルにアクセスできない場合に発生する可能性があります。

existsとが両方の場合、ファイルの存在を確認できませんnotExistsfalse

于 2016-06-02T12:24:01.630 に答える
11

インスタンスを作成Fileしてもファイルシステム上にファイルは作成されないため、投稿されたコードは必要な処理を実行します。

于 2012-07-02T10:23:56.050 に答える
3

Files.existsメソッドは、JDK 8のパフォーマンスが著しく低下し、実際には存在しないファイルをチェックするために使用すると、アプリケーションの速度が大幅に低下する可能性があります。

これは、Files.noExists、Files.isDirectory、Files.isRegularFileにも適用できます。

これによると、あなたは以下を使うことができます:

Paths.get("file_path").toFile().exists()
于 2018-03-27T13:42:59.623 に答える