Java 似乎没有提供一个删除非空文件夹的API.
所以删除整个文件夹的操作需要我们自己来做.
其实文件夹拷贝, 文件夹删除, 本质上是一个"文件树"遍历的问题.
粗糙的人 用递归实现. 个人认为递归绝对不能用在商业代码上.
下面示范一下我的删除文件夹操作的Java代码:
/***
* 删除文件或者文件夹
* @param f
* @return 成功 返回true, 失败返回false
*/
static private boolean delFileUnRoot(File f) {
boolean ret = true;
if (null == f || false == f.exists()) {
return ret;
}
Stack<File> tmpFileStack = new Stack<File>();
tmpFileStack.push(f);
try {
while(false == tmpFileStack.isEmpty()) {
File curFile = tmpFileStack.pop();
if (null == curFile) {
continue;
}
if (curFile.isFile()) {
if (false == curFile.delete()) {
ret = false;
}
} else {
File[] tmpSubFileList = curFile.listFiles();
if (null == tmpSubFileList || 0 == tmpSubFileList.length) { //空文件夹直接删
if (false == curFile.delete()) {
ret = false;
}
} else {
tmpFileStack.push(curFile); // !!!
for (File item : tmpSubFileList) {
tmpFileStack.push(item);
}
}
}
}
} catch (Exception e) {
ret = false;
}
return ret;
}
版权声明:本文为优快云博主「cwjxiuxing」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/cwjxiuxing/article/details/22723161

本文介绍了一种使用堆栈而非递归的Java代码实现,用于删除包含子文件和子文件夹的非空目录。这种方法避免了递归可能带来的栈溢出风险,提供了更稳定可靠的文件夹删除方案。
248

被折叠的 条评论
为什么被折叠?



