Удаление директории на Java — программа с рекурсивным обходом
Программа на Java для удаления пустого и непустого каталога.
Для понимания этого примера нужно знать следующие темы Java:
Класс
java.io.FileРекурсия в Java
Пример 1: удаление пустого каталога
import java.io.File;
class Main {
public static void main(String[] args) {
try {
// create a new file object
File directory = new File("Directory");
// delete the directory
boolean result = directory.delete();
if(result) {
System.out.println("Directory Deleted");
}
else {
System.out.println("Directory not Found");
}
} catch (Exception e) {
e.getStackTrace();
}
}
}
В примере выше мы использовали метод delete() класса File для удаления каталога Directory.
Если каталог существует, выводится Directory Deleted, иначе — Directory not Found.
Пример 2: удаление непустого каталога
В Java, чтобы удалить непустой каталог, сначала нужно удалить все файлы внутри него. Потом можно удалить сам каталог.
import java.io.File;
class Main {
public static void main(String[] args) {
try {
// create a new file object
File directory = new File("Directory");
// list all the files in an array
File[] files = directory.listFiles();
// delete each file from the directory
for(File file : files) {
System.out.println(file + " deleted.");
file.delete();
}
// delete the directory
if(directory.delete()) {
System.out.println("Directory Deleted");
}
else {
System.out.println("Directory not Found");
}
} catch (Exception e) {
e.getStackTrace();
}
}
}
В примере выше мы использовали цикл for-each, чтобы удалить все файлы из каталога. Когда все файлы удалены, использовали delete() для удаления самого каталога.
Пример 3: рекурсивное удаление непустого каталога
import java.io.File;
class Main {
public static void deleteDirectory(File directory) {
// if the file is directory or not
if(directory.isDirectory()) {
File[] files = directory.listFiles();
// if the directory contains any file
if(files != null) {
for(File file : files) {
// recursive call if the subdirectory is non-empty
deleteDirectory(file);
}
}
}
if(directory.delete()) {
System.out.println(directory + " is deleted");
}
else {
System.out.println("Directory not deleted");
}
}
public static void main(String[] args) {
try {
// create a new file object
File directory = new File("Directory");
Main.deleteDirectory(directory);
} catch (Exception e) {
e.getStackTrace();
}
}
}
Допустим, у нас есть непустой каталог Directory. Он содержит 2 файла file1.txt и file2.txt и непустой подкаталог Subdirectory. В свою очередь, Subdirectory содержит файл file11.txt.
Теперь, когда мы запустим программу, получим следующий вывод.
Вывод:
Directory\file1.txt is deleted
Directory\file2.txt is deleted
Directory\Subdirectory\file11.txt is deleted
Directory\Subdirectory is deleted
Directory is deleted
Сначала удаляются 2 файла, затем рекурсивная функция удаляет файлы внутри Subdirectory. Когда Subdirectory становится пустым, он удаляется. И, наконец, удаляется Directory.