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包有没有提供,如果提供了,就用他们的。不仅节约时间,提高效率,而且这些 顶尖高手写的代码的鲁棒性 都很好。万不得已再自己写。

猜你喜欢

转载自blog.csdn.net/bruce128/article/details/79072260