Ранее мы узнали как создать файл в Java и как удалить файл в Java. Сегодня мы научимся рекурсивно удалять папку в Java. Следует отметить, что папка должна быть непустой, потому что в классе j
ava.io.File
есть метод удаления файла или пустой папки, но если мы применим его к непустой папке, метод не сработает.
Именно поэтому для удаления папки с файлами и подкаталогами мы будем использовать метод delete()
с использованием рекурсии.
Пример удаления каталога с использованием рекурсии
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
package ua.com.prologistic; import java.io.File; // вспомогательный класс для рекурсивного удаления каталога public class DeleteFolderRecursively { public static void main(String[] args) { String folder = "/Users/prologistic/tmp"; // удаляем файл рекурсивно recursiveDelete(new File(folder)); } public static void recursiveDelete(File file) { // до конца рекурсивного цикла if (!file.exists()) return; //если это папка, то идем внутрь этой папки и вызываем рекурсивное удаление всего, что там есть if (file.isDirectory()) { for (File f : file.listFiles()) { // рекурсивный вызов recursiveDelete(f); } } // вызываем метод delete() для удаления файлов и пустых(!) папок file.delete(); System.out.println("Удаленный файл или папка: " + file.getAbsolutePath()); } } |
Здесь мы используем метод delete()
, чтобы удалить содержимое, а если это каталог с другими папками и файлами, то мы рекурсивно вызываем метод recursiveDelete()
.
Результат выполнения нашей программы будет следующий:
1 2 3 4 5 6 |
Удаленный файл или папка: /Users/prologistic/tmp/data/data.sql Удаленный файл или папка: /Users/prologistic/tmp/data Удаленный файл или папка: /Users/prologistic/tmp/ms/data.txt Удаленный файл или папка: /Users/prologistic/tmp/ms/project.doc Удаленный файл или папка: /Users/prologistic/tmp/ms Удаленный файл или папка: /Users/prologistic/tmp |
Следите за обновлениями раздела Java IO и другими обновлениями на Javadevblog.com.
» метод не сработает и метод вернет false»
Как он вернет false, если возвращаемое значение void?
Подправил, спасибо! Метод немного переделывался, а пояснение к коду подправить забыл 🙂