日期:2014-05-18  浏览次数:20615 次

兄弟们帮我看看,为什么只能删除第一个文件夹,我先谢谢了!!!!!!

删除文件夹及其里面的所有子文件夹与文件的类

package cn.web.bean;
import java.io.File;
import java.io.IOException;
public class DelFile {

public void del(String filepath) throws IOException{
File f = new File(filepath);//定义文件路径  
if(f.exists() && f.isDirectory()){//判断是文件还是目录
if(f.listFiles().length==0){//若目录下没有文件则直接删除
f.delete();
}else{//若有则把文件放进数组,并判断是否有下级目录
File delFile[]=f.listFiles();
int i =f.listFiles().length;
for(int j=0;j<i;j++){
if(delFile[j].isDirectory()){  

del(delFile[j].getAbsolutePath());//递归调用del方法并取得子目录路径
}
delFile[j].delete();//删除文件
}
}
del(filepath);//递归调用
}
 
}
  }

  在Servlet中调用该类

  String webRootPath = request.getSession().getServletContext().getRealPath("/");
String delPath=delPath=webRootPath+"web/mall/files/";
String select_SQL="SELECT ProductId FROM Products WHERE CategoryId='"+categoryId+"'";
  DelFile delFile=new DelFile();
DataBase db=new DataBase();
ResultSet rs=null;
rs=db.executeQuery(select_SQL);
while(rs.next())
{
delPath+=rs.getString("ProductId").trim();
delFile.del(delPath);
}

  如果从数据库中循环出20条记录,只能删除第一个文件夹,为什么呢?

  其后的19个文件夹删除不了,也没有报出什么异常,百不香其解。望兄弟

  指教,谢谢









------解决方案--------------------

这段代码在我这里可以删除整个目录,包括子目录和文件。 你的代码没发现问题!

如果删除不成功,原因可能是那个文件被使用中或者你的servlet运行用户没有权限

Java code
import java.io.File;
import java.io.IOException;

public class PassS {

  public static void main(String[] args) throws IOException {
    PassS p = new PassS();
    p.del("d:\\temp\\1");
  }

  public void del(String filepath) throws IOException {
    File f = new File(filepath);// 定义文件路径
    if (f.exists() && f.isDirectory()) {// 判断是文件还是目录
      if (f.listFiles().length == 0) {// 若目录下没有文件则直接删除
        f.delete();
      } else {// 若有则把文件放进数组,并判断是否有下级目录
        File delFile[] = f.listFiles();
        int i = f.listFiles().length;
        for (int j = 0; j < i; j++) {
          if (delFile[j].isDirectory()) {

            del(delFile[j].getAbsolutePath());// 递归调用del方法并取得子目录路径
          }
          delFile[j].delete();// 删除文件
        }
      }
      del(filepath);// 递归调用
    }

  }

}

------解决方案--------------------
delPath+=rs.getString("ProductId").trim(); 
这句话可能有问题

while(rs.next()) 

delFile.del(delPath+rs.getString("ProductId").trim()); 
}