> 文章列表 > 【java】删除文件夹及文件夹中的所有文件

【java】删除文件夹及文件夹中的所有文件

【java】删除文件夹及文件夹中的所有文件

需求

删除指定文件夹及文件夹中的所有文件。

环境

JDK 1.8

代码示例

在JDK 8中,可以使用java.nio.file.Files和java.nio.file.Path类来删除一个文件夹及其中的所有文件和子文件夹。具体代码如下所示:

import java.io.IOException;
import java.nio.file.*;public class DeleteDirectoryExample {public static void main(String[] args) throws IOException {Path directoryPath = Paths.get("your-directory-path"); //替换为具体的目录路径deleteDirectory(directoryPath);}public static void deleteDirectory(Path path) throws IOException {if (Files.isDirectory(path, LinkOption.NOFOLLOW_LINKS)) {try (DirectoryStream<Path> entries = Files.newDirectoryStream(path)) {for (Path entry : entries) {deleteDirectory(entry);}}}Files.delete(path);}
}

在上述代码中,请将 your-directory-path替换为要删除的目录路径。程序首先检查指定路径是否是一个目录,并继续递归删除其子目录和文件。最后,通过调用 Files.delete() 方法删除路径本身。

需要注意的是,该程序会永久性地删除指定的目录和其中的所有文件和子目录,因此请谨慎使用。

总结

该方法使用 JDK 1.8 提供的文件工具类,其中有几个不常用的类,解释如下

1、LinkOption.NOFOLLOW_LINKS
Files.isDirectory(path, LinkOption.NOFOLLOW_LINKS) 注释解释:

选项数组可以用于指示如何处理符号链接,以防文件是符号链接。默认情况下,将跟随符号链接,并读取链接的最终目标的文件属性。如果存在 NOFOLLOW_LINKS 选项,则不会跟随符号链接。

如果需要区分 I/O 异常与文件不是目录的情况,则可以使用readAttributes方法读取文件属性,并使用 BasicFileAttributes.isDirectory 方法测试文件类型。

2、DirectoryStream

Java中的 DirectoryStream 类是一个用于遍历目录的接口,它提供了一种基于迭代器的方式来获取指定目录下的文件和子文件夹。它可以与Java NIO.2中的Path类和Files类配合使用,使我们能够更方便地处理文件系统中的目录。

DirectoryStream类有一个泛型类型参数,通常用于指定遍历得到的元素类型,例如Path或String等。

以下是使用DirectoryStream类遍历目录并输出所有文件名的示例代码:

import java.io.IOException;
import java.nio.file.*;public class DirectoryStreamExample {public static void main(String[] args) throws IOException {Path directoryPath = Paths.get("your-directory-path"); // 替换为具体的目录路径try (DirectoryStream<Path> stream = Files.newDirectoryStream(directoryPath)) {for (Path file : stream) {System.out.println(file.getFileName());}}}
}

在上述代码中,请将 your-directory-path 替换为要遍历的目录路径。该程序创建一个DirectoryStream实例,并在try-with-resources语句块中使用它来遍历目录中的文件和子文件夹,最后输出所有文件名。使用try-with-resources语句块可以确保DirectoryStream对象被关闭,以释放相关资源。

需要注意的是,当使用DirectoryStream类遍历目录时,不会遍历子目录中的目录,因此需要使用递归算法来实现遍历整个目录树的操作。

关于更多 DirectoryStream 详见 【java】 DirectoryStream 及其简单使用