Удаление файла или каталога в Java

Узнайте, как удалить указанный файл или каталог в Java. Обратите внимание, что разные методы ведут себя по-разному для удаления непустых каталогов.

1. Удаление с помощью класса File

Для удаления файла класс File предоставляет следующие методы:

1.1. логическое удаление()

  • Удаляет указанный файл или каталог. В случае каталога, каталог должен быть пустым, чтобы его можно было удалить.
  • Этот метод возвращает значение true тогда и только тогда, когда файл или каталог успешно удален; в противном случае возвращается значение false.
  • В случае возникновения проблем с разрешениями выдается исключение SecurityException.
  • Если файл не может быть удален по какой-либо причине, то он не выдает никаких исключений, а просто возвращает false.

1.2. void deleteOnExit()

  • Он регистрирует файл для удаления при завершении работы виртуальной машины.
  • В случае модульного тестирования полезно удалять временные файлы после завершения выполнения теста.
  • Обратите внимание, что после запроса на удаление отменить его невозможно.
  • Попытка удаления будет предпринята только в случае нормального завершения работы JVM, в противном случае поведение не определено.
  • Если файл или каталог уже подлежит удалению, то этот метод не даст никакого эффекта.
//Deleting a file immidiatelyFile file = new File("c:/temp/one.txt");boolean deleted = file.delete();//Registering for deletionFile file = new File("c:/temp/two.txt");file.deleteOnExit();

2. Удаление с помощью java.nio.file.Files

Класс Files также предоставляет два следующих метода:

2.1. void удалить(путь)

  • Подобно File.delete(), этот метод также удаляет файл или пустой каталог.
  • Разница в том, что этот метод выдает исключение IOException, если файл не может быть удален, что полезно при отладке причины сбоя.
  • Он выдает исключение NoSuchFileException, если указанный файл или каталог не существует.
  • Аналогично, он выдает исключение DirectoryNotEmptyException, если указанный каталог не пуст.

2.2. логическое deleteIfExists(путь)

  • Этот метод представляет собой немного другую версию delete(). Он не выдает исключение NoSuchFileException, если файл или каталог отсутствуют.
  • Удаляет файл или каталог, если он существует.
  • Этот метод возвращает значение true, если файл был удален этим методом; false, если файл не удалось удалить.
Path path = Path.of("c:/temp/one.txt");Files.delete(path);//orPath path = Path.of("c:/temp/two.txt");boolean success = Files.deleteIfExists(path);

3. Удаление с помощью FileUtils Commons IO

Класс FileUtils имеет следующие полезные методы для удаления файлов и каталогов:

File delete(file) : удаляет файл или каталог. Внутри он использует метод Files.delete().
void deleteDirectory(file) : удаляет каталог рекурсивно. Возвращает IOException в случае неудачного удаления.
boolean deleteQuietly(file) : удаляет файл, не выдавая исключения. Если файл является каталогом, удалить его и все подкаталоги. Не требуется, чтобы каталог был пустым, как это требуется в других методах.

FileUtils.delete(file);FileUtils.deleteQuietly(new File("c:/temp"));boolean success = FileUtils.deleteDirectory(new File("c:/temp"));

4. Заключение

Удаление файла или каталога в Java — очень простая операция, которая в основном выполняется одним оператором. Тем не менее, иногда она может не работать по двум причинам: проблемы с разрешениями и непустой каталог.

В качестве наилучшей практики мы можем использовать Files.delete(path) для удаления файла и FileUtils.deleteDirectory() для рекурсивного удаления каталога.

Исходный код на Github

Прокрутить вверх