Узнайте, как удалить указанный файл или каталог в 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() для рекурсивного удаления каталога.