删除空目录和非空目录的 Java 程序

要理解此示例,您应该具备以下 Java 编程的知识:

示例 1:Java 程序删除空目录

import java.io.File;

public 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("目录已删除");
      }
      else {
        System.out.println("未找到目录");
      }

    } catch (Exception e) {
      e.getStackTrace();
    }
  }
}

在上面的例子中,我们使用了 File 类的 delete() 方法来删除名为 Directory 的目录。

此处,如果目录存在,则会显示消息目录已删除。否则,将显示未找到目录

示例 2:删除非空目录

在 Java 中,要删除非空目录,我们必须首先删除该目录中存在的所有文件。然后,我们可以删除目录。

import java.io.File;

public 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;

public 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 的非空目录. 这 Directory 包含 2 个文件 (file1.txtfile2.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 被删除。