public boolean removeDirectory(String path, boolean isAll)
    throws IOException { if (!isAll) {
    return removeDirectory(path);
} FTPFile[] ftpFileArr = ftpClient.listFiles(path);
if (ftpFileArr == null || ftpFileArr.length == 0) {
    return removeDirectory(path);
}
for (FTPFile ftpFile : ftpFileArr) {
    String name = ftpFile.getName();
    if (ftpFile.isDirectory()) {
System.out.println("* [sD]Delete subPath [" + path + "/" + name + "]");
removeDirectory(path + "/" + name, true);
    } else if (ftpFile.isFile()) {
System.out.println("* [sF]Delete file [" + path + "/" + name + "]");
deleteFile(path + "/" + name);
    } else if (ftpFile.isSymbolicLink()) {     } else if (ftpFile.isUnknown()) {     }
}
return ftpClient.removeDirectory(path);
    }
以上代码哪里不对?为什么删除的时候执行了死循环???

解决方案 »

  1.   

    问题可能出现在removeDirectory。这里的递归需要每次都传当前path+"name"
      

  2.   

    public boolean removeDirectory(String path, boolean isAll) 
        throws IOException { if (!isAll) { 
        return removeDirectory(path); 
    } FTPFile[] ftpFileArr = ftpClient.listFiles(path); 
    if (ftpFileArr == null ¦ ¦ ftpFileArr.length == 0) { 
        return removeDirectory(path); 

    for (FTPFile ftpFile : ftpFileArr) { 
        String name = ftpFile.getName(); 
        if (ftpFile.isDirectory()) { 
    System.out.println("* [sD]Delete subPath [" + path + "/" + name + "]"); 
    removeDirectory(path + "/" + name, true); 
        } else if (ftpFile.isFile()) { 
    System.out.println("* [sF]Delete file [" + path + "/" + name + "]"); 
    deleteFile(path + "/" + name); 
        } else if (ftpFile.isSymbolicLink()) {     } else if (ftpFile.isUnknown()) {     } 

    return ftpClient.removeDirectory(path); 
        } 
      

  3.   

    path+"name"
    你把这个改成  file.getPath()吧,
    然后在每个分枝打印一个内容,看哪块出了问题
      

  4.   

    你的增加型FOR语句里的代码有问题!