Научитесь использовать классы из Java IO, New IO и Commons IO для удаления каталога, включая все подкаталоги и файлы в нем.
1. Использование FileUtils.deleteDirectory() из Apache Commons IO
Включите модуль Commons IO в проект, используя зависимости Maven.
<зависимость><groupId>commons-io</groupId><artifactId>commons-io</artifactId><версия>2.11.0</версия></зависимость>
Модуль Commons IO имеет класс FileUtils. Его метод deleteDirectory(dir) можно использовать для удаления каталога вместе со всеми подкаталогами и файлами внутри него.
Этот метод выдает исключение IOException в случае, если удаление по какой-либо причине не удалось.
Файл file = FileUtils.getFile("c:/temp/innerDir");FileUtils.deleteDirectory(файл);
Используйте другой метод deleteQuitly(dir) для тихого удаления. Этот метод никогда не выдает исключение. Он возвращает true, если каталог был удален, в противном случае false.
Файл file = FileUtils.getFile("c:/temp/innerDir");boolean isDeleted = FileUtils.deleteQuietly( файл );
2. Использование Files.delete() из Java NIO
Другой подход в документации Java заключается в использовании Files.walkFileTree() для перебора всех подкаталогов и файлов в заданном каталоге и удаления их по одному.
Он работает в два этапа рекурсивно:
- Сначала он удаляет все файлы в каталоге, затем
- Удаляет сам каталог.
В этом примере Java для выполнения операции удаления используются метод Files.walkFileTree() и SimpleFileVisitor.
импорт java.io.IOException;импорт java.nio.file.FileVisitResult;импорт java.nio.file.Файлы;импорт java.nio.file.Path;импорт java.nio.file.Paths;импорт java.nio.file.SimpleFileVisitor;импорт java.nio.file.attribute.BasicFileAttributes;публичный класс DeleteDirectoryNIO{public static void main(String[] args){Путь dir = Paths.get("c:/temp/innerDir");пытаться{Файлы.walkFileTree(dir, new SimpleFileVisitor<Path>(){@Переопределитьpublic FileVisitResult visitFile(Путь к файлу, BasicFileAttributes attrs)выдает IOException{System.out.println("Удаление файла: " + file);Файлы.удалить(файл);вернуть FileVisitResult.CONTINUE;}@Переопределитьпубличный FileVisitResult postVisitDirectory(Path dir,IOException exc) выдает IOException{System.out.println("Удаление каталога: " + dir);если(искл == ноль) {Файлы.delete(dir);вернуть FileVisitResult.CONTINUE;} еще {бросить отл;}}});}поймать(IOException e){e.printStackTrace();}}}
3. Удаление каталога в Java 8
Начиная с Java 8, мы можем объединить операции Java NIO с потоками Java, и описанный выше подход становится намного чище.
публичный класс DeleteDirectoryNIOWithStream{public static void main(String[] args){Путь dir = Paths.get("c:/temp/innerDir");Файлы.walk(директория).sorted(Компаратор.reverseOrder()).map(Путь::кФайлу).forEach(Файл::удалить);}}
Здесь Files.walk() возвращает поток путей, обозначающих содержимое каталогов(т.е. файлы) до самих каталогов. После этого он сопоставляет Path с File и удаляет каждый файл. Теперь вы используете метод delete() для удаления самого файла.
Используйте приведенные выше примеры кода всякий раз, когда вам нужно удалить каталог со всеми файлами внутри него.