递归创建的文件夹过深无法删除
前几天对文件类进行测试,不小心创建了一个n层级的文件夹,网上找了很多方法,不是让下软件,就是批处理文件,这些方法我都进行了尝试,但全部都无法使用;
后来稍微想了一下解决方案,完美删除;
先说核心思想:要用魔法打败魔法;
既然我们n层级的文件夹时由于递归操作生成的,那理论上我们重新递归对文件夹进行删除即可;
废话不多说,上代码
private static void deleteAll(String filePath) {
File file = new File(filePath);
if (file.isFile()) {//如果是文件,直接删除
System.out.println(file + "文件" + (file.delete() ? "已删除" : "未删除"));
}
if (file.isDirectory()) {
File[] fileAll = file.listFiles();//获取文件夹下的子目录
if (fileAll == null) {//如果文件夹为空,直接return,预防NullPointException
return;
}
if(fileAll.length != 0) {//如果文件夹内子文件夹的长度不为0则说明该文件夹下还有子目录
for (File part : fileAll) {//继续遍历子目录列表,向下递归
deleteAll(part.getAbsolutePath());
}
} else {//反之,长度为0说明没有该文件夹下没有子目录,直接删除即可
System.out.println(file + "文件夹" + (file.delete() ? "已删除" : "未删除"));
}
System.out.println(file + "文件夹" + (file.delete() ? "已删除" : "未删除"));
}
}
代码仅供参考,思路都是一样的,可以自己尝试写一写,或者在自己原有的代码上进行修改;毕竟出现这种错误多半是编写代码进行文件复制等操作,方法逻辑出错造成的;
关于这段代码的使用注意事项:
直接从第一层传入参数则很可能会删除失败,建议先对文件夹路径进行复制,能复制多少就复制多少层,越多越好;
举个例子,
比如说一开始我设置参数列表中传入的参数是"D://Study//FileTest",运行结果是删除失败;
于是我多复制了几次递归的文件夹:
然后,删除成功:
这里程序运行删除成功后可以改变参数继续尝试删除,也可以直接进入文件系统进行删除;
最终我成功删除了这个递归文件夹;