Как удалить файл или папку
Короткий ответ
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().