楼主自己对照一下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();
}

解决方案 »

  1.   

    看有没有只读属性的文件和目录,最好先修改文件为可以修改,再删除.我以前用delphi作同样的程序,就吃过这个亏
      

  2.   

    to 楼主:
     GJA106(中文字符)的递归函数的结构很清晰,但是你的函数结构就不行了,递归调用一般在尾部,这样所有的语句才可以执行到。在你的函数中
        deleteAttachment(dirid);//删除附件信息
        deleteFileInfo(dirid);//删除文件信息
        String sql = "delete YW_GRBG_GRWJGDIR where DIR_ID='" + dirid + "'";
        System.out.println("删除目录"+dirid);
    是不是只执行了一次啊?
      

  3.   

    感觉起来应该不是很困难啊楼猪debug一把嘛!
      

  4.   

    liqian008(天生青) :你来吧。
      

  5.   

    我的这种目录上下级关联关系,是在数据库中记录的,目录中包含子目录,包含文件、附件。我的程序有问题,我知道的liqian008(天生我才必愤青) ,怎么调呢?请各位帮忙看看,谢谢
      

  6.   

    搞定了,谢谢各位。参照楼上兄弟的做法:
     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);  }
      

  7.   

    楼主,问题在这里
    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()获得子目录个数,而每次循环又会删除子目录,则子目录个数是逐渐递减的,导致循环的次数不足,当然会有部分目录未被删除,循环前用个变量包存最初的子目录个数吧。