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;
}