Encodera

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

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

Как удалить файл или папку

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

Files.deleteIfExists() удаляет файл и возвращает true, или false, если файла не было:

void main() throws IOException {
    Path file = Path.of("temp.txt");
    Files.writeString(file, "data");
 
    IO.println(Files.deleteIfExists(file));
    IO.println(Files.deleteIfExists(file));
}

Результат:

true
false

Строгое удаление

Files.delete() выбрасывает исключение, если файла нет — удобно, когда его отсутствие означает ошибку:

void main() throws IOException {
    Files.delete(Path.of("missing.txt"));
}

Результат:

Exception in thread "main" java.nio.file.NoSuchFileException: missing.txt

Папка с содержимым

Непустую папку удалить нельзя. Обойдите её через Files.walk() и удаляйте с самых глубоких элементов:

void main() throws IOException {
    Path root = Path.of("build");
    Files.createDirectories(root.resolve("classes"));
    Files.writeString(root.resolve("classes/App.class"), "x");
 
    try (var paths = Files.walk(root)) {
        for (Path p : paths.sorted(Comparator.reverseOrder()).toList()) {
            Files.delete(p);
        }
    }
    IO.println(Files.exists(root));
}

Результат:

false

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

Вызвать delete() у непустой папки:

void main() throws IOException {
    Path dir = Files.createDirectories(Path.of("logs"));
    Files.writeString(dir.resolve("a.log"), "x");
    Files.delete(dir);
}

Результат:

Exception in thread "main" java.nio.file.DirectoryNotEmptyException: logs

Удалённые так файлы не попадают в корзину — восстановить их нельзя.

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

  • Files.delete() — Удаляет файл или пустую папку. Вариант deleteIfExists() не бросает исключение, если файла нет.
  • Files.list() — Возвращает поток файлов и папок внутри папки (без вложенных). Рекурсивно обходит Files.walk().

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

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