java删除文件夹的实现方式

 更新时间:2025年07月10日 08:47:50   作者:bruce128  
用户发现File.delete()无法删除非空目录,尝试自定义递归删除方法后,发现commons-io已提供FileUtils.deleteDirectory,建议优先使用第三方库避免重复造轮子,提升效率与代码可靠性

java删除文件夹

先看File.delete()的方法api文档

Deletes the file or directory denoted by this abstract pathname. If
this pathname denotes a directory, then the directory must be empty in
order to be deleted.

意即,删除文件或者目录,但是如果是目录,则这个目录必须是空的才能被删除。也就是说,要删一个非空文件夹,直接调delete方法是无法达到目的的。

看到这个api说明时,我的第一想法是,用 先根遍历序递归删除 文件夹。

搞定了这个工具方法和单元测试

/**
 * 先根遍历序递归删除文件夹
 *
 * @param dirFile 要被删除的文件或者目录
 * @return 删除成功返回true, 否则返回false
 */
public static boolean deleteFile(File dirFile) {
    // 如果dir对应的文件不存在,则退出
    if (!dirFile.exists()) {
        return false;
    }

    if (dirFile.isFile()) {
        return dirFile.delete();
    } else {

        for (File file : dirFile.listFiles()) {
            deleteFile(file);
        }
    }

    return dirFile.delete();
}

单元测试

@Test
public void delete() {
    File file = new File("/temp/lock11-1");
    ExcelDiskUtils.deleteFile(file);
}

功能是OK的。但是晚上回家想了想。这么基础的工具方法,肯定有第三方工具类提供支持,自己再写一遍是浪费时间。于是我开始查guava和commons-io的工具类。

在commons-io包里找到了一个能达到同样目的的方法org.apache.commons.io.FileUtils#deleteDirectory

    /**
     * Deletes a directory recursively.
     *
     * @param directory directory to delete
     * @throws IOException              in case deletion is unsuccessful
     * @throws IllegalArgumentException if {@code directory} does not exist or is not a directory
     */
    public static void deleteDirectory(final File directory) throws IOException {
        ... ...
    }

看方法的api说明

Deletes a directory recursively.

意即,递归的删除一个目录。

自己在写一些常规的工具方法时,最好先看看commons包或者guava包有没有提供,如果提供了,就用他们的。

不仅节约时间,提高效率,而且这些 顶尖高手写的代码的鲁棒性 都很好。

没必要重复造轮子,遇到定制需求,万不得已再自己写。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • spring boot security设置忽略地址不生效的解决

    spring boot security设置忽略地址不生效的解决

    这篇文章主要介绍了spring boot security设置忽略地址不生效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 使用ProGuard混淆JavaWeb项目代码的操作步骤

    使用ProGuard混淆JavaWeb项目代码的操作步骤

    在开发JavaWeb应用时,为了保护源代码不被轻易反编译和阅读,通常会采用代码混淆技术,ProGuard是一个广泛使用的免费工具,可以用来优化、缩小和混淆Java字节码,本文将详细介绍如何使用ProGuard对JavaWeb项目进行代码混淆,需要的朋友可以参考下
    2025-05-05
  • Java 基础--Arrays工具类详解

    Java 基础--Arrays工具类详解

    这篇文章主要介绍了Java Arrays工具类用法,结合实例形式分析了java Arrays工具类针对数组元素修改、复制、排序等操作使用技巧与相关注意事项,需要的朋友可以参考下
    2021-09-09
  • IDEA强制清除Maven缓存的实现示例

    IDEA强制清除Maven缓存的实现示例

    清除项目缓存是一个常见的操作,本文主要介绍了IDEA强制清除Maven缓存的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • 通过Java实现获取表的自增主键值

    通过Java实现获取表的自增主键值

    这篇文章主要为大家详细介绍了如何通过Java实现获取表的自增主键值,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的可以了解一下
    2023-06-06
  • Spring中初始化泛型类的方法实例

    Spring中初始化泛型类的方法实例

    这篇文章主要给大家介绍了Spring中如何初始化泛型类,文中给出详细的介绍和方法实例,对大家的理解和学习具有一定的参考借鉴价值,有需要的朋友可以参考学习,下面来一起看看吧。
    2017-01-01
  • SpringBoot指标监控功能实现

    SpringBoot指标监控功能实现

    这篇文章主要介绍了SpringBoot指标监控功能实现,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-06-06
  • JAVA Integer类型自加实例详解

    JAVA Integer类型自加实例详解

    这篇文章主要介绍了JAVA Integer类型自加实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 浅谈一下Java中的访问修饰符以及作用

    浅谈一下Java中的访问修饰符以及作用

    这篇文章主要介绍了浅谈一下Java中的访问修饰符以及作用,修饰符修饰的是“被访问”的权限,所有修饰符都可以修饰成员变量,方法,构造方法,需要的朋友可以参考下
    2023-05-05
  • Java基础教程之对象引用

    Java基础教程之对象引用

    这篇文章主要介绍了Java基础教程之对象引用,“对象引用”(object reference)是一个重要重要概念,涉及内存,需要的朋友可以参考下
    2014-09-09

最新评论