使用 Java 删除文件夹
在本文中,我们将学习如何使用 Java 编程语言删除文件夹/目录。 有多种方法可以做到这一点。 让我们一一看看。
使用Java的File类的delete()删除空文件夹
在Java中,我们有java.io.File类,它包含一个名为delete()的方法,用于删除文件和空目录。
句法:
file_object.delete()
假设我们系统的 D: 驱动器中存在一个名为 test 的空目录。 现在,让我们看看如何使用 delete() 方法删除它。
示例代码:
import java.io.File;
public class Example
{
public static void main(String[] args)
{
String path = "D:\\test";
File obj = new File(path);
obj.delete();
}
}
当执行上述代码时,我们看到文件夹 test 已从系统的 D: 驱动器中删除。
在上面的代码中,我们创建了一个存储目录路径的字符串变量。 然后我们使用这个路径来创建我们的文件对象 obj。
最后,我们使用了delete()方法,该方法删除文件对象obj引用的该路径中的目录。
但是,如果文件夹 test 包含一些文件(例如 file1.txt 和 file2.txt)怎么办? 在这种情况下,当执行上述代码时,不会发生任何事情,因为目录不为空,并且我们知道delete()方法仅适用于空目录。
我们可以使用递归删除来解决删除非空目录的问题。
使用 Java 递归删除文件夹
在此方法中,我们将使用 delete() 方法和递归。 我们的想法是首先删除测试目录中存在的所有子文件夹和文件,一旦它为空,我们就可以使用 delete() 方法将其删除。
目录结构:
test
/ | \
/ | \
/ | \
file1.txt | file2.txt
|
hero
/ \
file3.txt file4.txt
我们在 D: 驱动器中有一个 test 文件夹,其中有两个文本文件:file1.txt 和 file2.txt,以及一个子文件夹 Hero,其中也包含两个文本文件:file3.txt 和 file4.txt。
所以在这里,我们将删除file1.txt,file2.txt,然后我们进入子文件夹hero并删除file3.txt和file4.txt。 由于子文件夹是空的,我们可以轻松删除它。
所有这些之后,目录 test 也变空了,可以使用 delete() 方法轻松删除它。
算法:
- 获取要删除的目录下的所有文件和子文件夹。
- 所有不是目录的子级,这意味着应该删除文件。
- 退出递归。
- 对于每个子文件夹(子文件夹/子目录),递归地重复步骤 1 到 3。
-
使用
delete()
方法删除主目录。
我们必须使用两个函数来实现上述算法:listFiles()
和disDirectory()
。
listFiles()
方法返回目标目录中所有文件和子文件夹的抽象路径(对象)数组。 isDirectory()
是一个布尔函数,如果当前对象是目录,则返回 true; 否则,返回 false。
示例代码:
import java.io.File;
public class Example
{
static void recursiveDelete(File targetDirectory) {
File[] data = targetDirectory.listFiles();
for (File file : data) {
if(file.isDirectory())
recursiveDelete(file);
else
file.delete();
}
targetDirectory.delete();
}
public static void main(String[] args)
{
String path = "D:\\test";
File obj = new File(path);
recursiveDelete(obj);
}
}
使用 Java 8 Streams 和 NIO2 使用 Java 删除文件夹
在此方法中,我们可以使用 Files.walk(Path)
方法,该方法返回 Stream<Path>
,其中包含该路径中的所有文件和子文件夹。
示例代码:
import java.io.*;
import java.nio.file.*;
import java.util.*;
public class Example
{
public static void main(String[] args)throws IOException
{
Path path = Paths.get("D:\\test");
Files.walk(path).sorted(Comparator.reverseOrder())
.forEach(data->
{
try
{
System.out.println("deleting: "+data);
Files.delete(data);
}
catch(IOException obj)
{
obj.printStackTrace();
}
});
}
}
当执行上述代码时,它会以深度优先搜索的方式删除目录的所有内容,然后删除目录本身。
输出:
deleting: D:\test\hero\file4.txt
deleting: D:\test\hero\file3.txt
deleting: D:\test\hero
deleting: D:\test\file2.txt
deleting: D:\test\file1.txt
deleting: D:\test
使用 Apache Common IO 使用 Java 删除文件夹
到目前为止,我们看到的所有方法都是普通的旧 Java 方法,它们使用一些递归概念以及文件和流方法。 但是我们可以使用 Apache Common IO FileUtils.deleteDirectory 来删除目录。
与原始 Java 方法相比,使用这种方法的主要优点是代码行 (LOC) 显着减少,使其成为一种简单且更有效的编写方式。
要使用 Apache common IO,我们必须首先在 pom.xml 文件中添加依赖项。
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
示例代码:
import java.io.*;
import org.apache.commons.io.FileUtils;
public class Example
{
public static void main(String[] args)throws IOException
{
String path = "D:\\test";
File obj = new File(path);
FileUtils.deleteDirectory(obj);
}
}
结论
本文展示了使用 Java 删除目录的不同方法。 我们了解了如何使用递归和 Java 8 流。
我们还了解如何使用 Apache Commons IO 变得更加高效和节省时间,其中 LOC(代码行)极大地影响了我们项目的性能。
相关文章
Java 中的多个动作监听器
发布时间:2023/08/09 浏览次数:178 分类:Java
-
本文我们将介绍如何在 Java 中创建多个动作监听器。在Java中,ActionListener是一个用于处理动作事件的类。 因此,Java 提供了这个接口,使用它我们可以找到用户单击按钮的位置,并生成一些事件
在 Java 中创建通用链表
发布时间:2023/08/09 浏览次数:186 分类:Java
-
本文我们将介绍如何在 Java 中创建一个通用的单链表。Java LinkedList 简介 LinkedList 是线性数据结构,它将数据存储在随机地址的节点中,并且意味着位于不连续的位置。
在JavaFX中使用setAlignment方法
发布时间:2023/08/09 浏览次数:129 分类:Java
-
在本文中,我们将了解如何以我们自己的格式对齐 HBox。 我们将看一个例子并逐行解释它以使其更容易理解。在 JavaFX 中使用 setAlignment() 方法
在 JavaFX 中使用 KeyEvent
发布时间:2023/08/09 浏览次数:70 分类:Java
-
KeyEvent 用于检测按键并在按下按键时执行特定的代码块。本文将展示如何创建按键事件并在用户按下按键时执行简单的代码。 我们还将看到一个简单的示例,以使其更容易理解。
在 JavaFX 中移动对象
发布时间:2023/08/09 浏览次数:199 分类:Java
-
在本文中,我们将向左、右、上、下四个方向移动对象。 为此,我们将使用以下代码。在 JavaFX 中移动对象 我们看一下下面的代码。 我们稍后会解释。
修复在 JRE 8 中使用 JavaFX 时的访问限制错误
发布时间:2023/08/09 浏览次数:95 分类:Java
-
本文将讨论如何修复在 JRE 8 中使用 JavaFX 时出现的访问限制错误。此错误主要发生在 Eclipse IDE 中; 我们的解决方案主要基于Eclipse。修复在 JRE 8 中使用 JavaFX 时的访问限制错误
JavaFX 中的 setOnAction 方法
发布时间:2023/08/09 浏览次数:168 分类:Java
-
在本文中,我们将了解如何为任何 UI 组件创建操作。 此外,我们将看到一个带有解释的示例,以使该主题更容易理解。在JavaFX中使用setOnAction方法
JavaFX 中的 setCellValueFactory 方法
发布时间:2023/08/09 浏览次数:138 分类:Java
-
在本文中,我们将讨论此方法并查看一个带有解释的示例。在 JavaFX 中使用 setCellValueFactory 方法 在下面的示例中,我们创建了一个包含一些数据的简单表。 我们示例的代码如下所示。
在 JavaFX 中创建透明场景
发布时间:2023/08/09 浏览次数:154 分类:Java
-
本文将展示如何在我们的应用程序上创建这个场景。 此外,我们还看到一个带有适当解释的示例,以使该主题更容易理解。在 JavaFX 中创建透明场景 在下面的示例中,我们将制作一个完全不可