Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как проверить, существует ли файл

Короткий ответ

Пусть рядом с программой лежит config.txt. Files.exists() проверяет, есть ли файл или папка по пути:

void main() {
    IO.println(Files.exists(Path.of("config.txt")));
    IO.println(Files.exists(Path.of("missing.txt")));
}

Результат:

true
false

Файл или папка

isRegularFile() и isDirectory() уточняют, что именно лежит по пути:

void main() {
    Path path = Path.of("config.txt");
 
    IO.println(Files.isRegularFile(path));
    IO.println(Files.isDirectory(path));
    IO.println(Files.isDirectory(Path.of(".")));
}

Результат:

true
false
true

Права доступа

isReadable() и isWritable() проверяют, можно ли читать и писать:

void main() {
    Path path = Path.of("config.txt");
    IO.println(Files.isReadable(path) + " " + Files.isWritable(path));
}

Результат:

true true

Частая ошибка

Проверить exists() и считать, что чтение точно пройдёт. Между проверкой и чтением файл может удалить другая программа. Проверка удобна для сообщений пользователю, но IOException всё равно нужно обрабатывать:

void main() {
    Path path = Path.of("config.txt");
    try {
        IO.print(Files.readString(path));
    } catch (IOException e) {
        IO.println("Cannot read " + path + ": " + e.getMessage());
    }
}

Результат:

debug=true

Функции из этого ответа

  • Files.exists() — Проверяет, существует ли файл или папка. Рядом — isDirectory(), isRegularFile(), size().

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.