我在用File类创建文件夹时,出现死循环、无限嵌套创建子文件夹,且创建的文件夹无法删除。
关键代码如下:
public void copy(File f) throws IOException {
String s2, s3, s4;
File file = new File(f1);
File file2 = new File(f2);
if (file.isDirectory()) {
s2 = file.getName(); //得到当前文件名
s3 = file2.getAbsolutePath(); //获取要创建文件的绝对路径名
s4 = s3 + "/" + s2;
File ff = new File(s4);
ff.mkdirs(); //创建文件夹
f1 = ff.getAbsolutePath(); //将创建的文件夹的绝对路径赋给 f1,f2
f2 = ff.getAbsolutePath();
copy(ff); //递归
}
}
结果是创建的文件夹里又有文件夹一直无限循环创建下去,强制结束程序,删除刚创建的文件夹却弹出‘文件路径名太长无法删除文件夹’。
解决办法:
出现死循环是因为递归没有结束条件,加个结束条件就可以了;下面是删除因为“文件路径名太长而无法删除”的文件夹的代码:
import java.io.File;
/**
* 无限删除文件夹,解救无限创建的子文件夹删除不了的问题
* @author 小苗
*
*/
public class ForeverDelete {
//删除文件夹方法
private void deleteDir(File file) {
if (file.listFiles().length == 0)
file.getAbsoluteFile().delete();
}
//删除文件方法
public void deleteFile(File file) {
File[] temp = file.listFiles();
for (int i = 0; i < temp.length; i++) {
System.out.println(temp[i].getName());
if (temp[i].isDirectory()) {
if (temp[i].listFiles().length != 0)
this.deleteFile(temp[i]); //如果 文件夹里不为空 递归调用 方法
this.deleteDir(temp[i]);
} else {
temp[i].delete();
}
}
}
public static void main(String[] args) {
ForeverDelete m = new ForeverDelete();
m.deleteFile(new File("D:\\system32"));
}
}