Подтвердить что ты не робот

Проверьте, существует ли файл без его создания.

Если я это сделаю:

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

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

Затем файл создается и всегда возвращает "Файл существует". Можно ли проверить, существует ли файл без его создания?

EDIT:

Я забыл упомянуть, что это в цикле for. Итак, вот настоящая вещь:

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

Ответ 1

Когда вы создаете экземпляр File, вы не создаете что-либо на диске, а просто создаете объект, для которого вы можете вызывать некоторые методы, такие как exists().

Это хорошо и дешево, не пытайтесь избежать этого создания.

Экземпляр File имеет только два поля:

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() - правильный путь для продолжения. Не пытайтесь оптимизировать это.

Ответ 2

Создание экземпляра File не создает файл в файловой системе, поэтому размещенный код будет делать то, что вам нужно.

Ответ 3

Начиная с 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 status is unknown!");
}

В руководстве по Oracle вы можете найти некоторые подробности об этом:

Методы в классе Path являются синтаксическими, то есть они работают с экземпляром Path. Но в конечном итоге вы должны получить доступ к файловой системе, чтобы убедиться, что определенный Path существует или не существует. Это можно сделать с помощью exists(Path, LinkOption...) и notExists(Path, LinkOption...). Обратите внимание, что !Files.exists(path) не эквивалентен Files.notExists(path). Когда вы проверяете существование файла, возможны три результата:

  • Файл проверен на существование.
  • Файл проверен на отсутствие.
  • Статус файла неизвестен. Этот результат может возникнуть, когда программа не имеет доступа к файлу.

Если оба exists и notExists возвращает false, существование файла невозможно проверить.

Ответ 4

Метод Files.exists заметно снижает производительность в JDK 8 и может значительно замедлить работу приложения, когда используется для проверки файлов, которые на самом деле не существуют.

Это также может быть применено для файлов Files.noExists, Files.isDirectory и Files.isRegularFile.

В соответствии с этим вы можете использовать следующее:

Paths.get("file_path").toFile().exists()