楼主自己对照一下private void deleteFolder(File folder) {
String childs[] = folder.list();
if (childs == null || childs.length <= 0) {
folder.delete();
}
for (int i = 0; i < childs.length; i++) {
String childName = childs[i];
String childPath = folder.getPath() + File.separator + childName;
File filePath = new File(childPath);
if (filePath.exists() && filePath.isFile()) {
filePath.delete();
}
else if (filePath.exists() && filePath.isDirectory()) {
deleteFolder(filePath);
}
} folder.delete();
}
String childs[] = folder.list();
if (childs == null || childs.length <= 0) {
folder.delete();
}
for (int i = 0; i < childs.length; i++) {
String childName = childs[i];
String childPath = folder.getPath() + File.separator + childName;
File filePath = new File(childPath);
if (filePath.exists() && filePath.isFile()) {
filePath.delete();
}
else if (filePath.exists() && filePath.isDirectory()) {
deleteFolder(filePath);
}
} folder.delete();
}
GJA106(中文字符)的递归函数的结构很清晰,但是你的函数结构就不行了,递归调用一般在尾部,这样所有的语句才可以执行到。在你的函数中
deleteAttachment(dirid);//删除附件信息
deleteFileInfo(dirid);//删除文件信息
String sql = "delete YW_GRBG_GRWJGDIR where DIR_ID='" + dirid + "'";
System.out.println("删除目录"+dirid);
是不是只执行了一次啊?
public void deleteDIRInfo(String dirid){
ArrayList al = getChildID(dirid);
if (al.size()<=0){
deleteDIRAll(dirid);
}
for (int i = 0; i < al.size(); i++) {
HashMap hsmp = (HashMap) al.get(i);
String childid = hsmp.get("DIR_ID").toString();
deleteDIRInfo(childid);
} deleteDIRAll(dirid);
System.out.println("删除目录"+dirid); }
for (int i=0;i<getChildID(dirid).size();i++){
HashMap hsmp = (HashMap)getChildID(dirid).get(i);
String childid= hsmp.get("DIR_ID").toString();
deleteDIRInfo(childid);//递归删除目录
}
你每次循环都调用getChildID(dirid).size()获得子目录个数,而每次循环又会删除子目录,则子目录个数是逐渐递减的,导致循环的次数不足,当然会有部分目录未被删除,循环前用个变量包存最初的子目录个数吧。