java删除文件夹的实现方式
作者: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包有没有提供,如果提供了,就用他们的。
不仅节约时间,提高效率,而且这些 顶尖高手写的代码的鲁棒性 都很好。
没必要重复造轮子,遇到定制需求,万不得已再自己写。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
