Удаление директории на 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.