递归删除路径下的所有文件及文件夹"/>
java递归删除路径下的所有文件及文件夹
Help:
今天收到一个求助,朋友小明说接到一个需求其中的一部分内容是将整理的文件在C:xxx\Temp\下执行打包,当打包完成后删除原来整理的资料内容,包含文件夹
error:
小明写好代码后报错信息提示:: Unable to delete file ---无法删除文件
常规分析:
1.有可能有流对该文件进行操作2.有可能有流对该文件操作完没有进行关流操作3.有可能时外部进程或那个程序在占用该文件。
由于哥们朋友用的是内网开发,我也远程不了他,就用了最简单高效的判断方法,即找到文件的路径将提示删除不掉的文件手动进行删除,如果该文件有占用的话,系统会提示出来,经哥们朋友的一顿操作后发现好像是自己的代码写的有问题,那我又远程不了他,只能将代码写出来发给他进行验证,不过呢像这种java基础的东西可能也没有高大上而优雅的写法,我就用简单的java.io.File进行操作,感兴趣的小伙伴们可以一同来看看,当然还有其它更好更优雅的代码比如糊涂工具的那一套,本次就没有使用啦,因为不知道引入糊涂依赖哥们朋友那面的单位是否允许,好啦,废话少说,代码来啦
package com.kk;import java.io.File;public class TestDemo {public static void main(String[] args) {//定义待处理的文件夹路径String path = "D:\\A\\a.png"; dealFiles(path);}/*** 递归处理某路径下的所有文件,文件夹** @param clientBase*/public static void dealFiles(String clientBase) {File file = new File(clientBase);if (file.isDirectory()) {File[] files = file.listFiles();for (File item : files) {if (item.isDirectory()) {//继续读取目录下文件或文件夹dealFiles(item.getPath()); } else {rmFile(item);}}} else {rmFile(file);}}/*** 判断是否是以“.lastUpdated”结尾的文件,若是则删除* 或是“_remote.repositories”命名的文件,若是则删除** @param file*/public static void rmFile(File file) {if (file.getName().endsWith(".lastUpdated")) {file.delete();System.out.println("删除文件:" + file.getPath());} else if (file.getName().equals("_remote.repositories")) {file.delete();System.out.println("删除文件:" + file.getPath());}}
}
经过哥们朋友的验证反馈,nice,顺利删除文件后,高兴了一会后发现存放文件的文件夹没有删除掉,正在挠头的时候,修改的终版代码来啦
package com.kk;import java.io.File;public class TestDemo1 {public static void main(String[] args) {//待处理的文件夹路径String path = "D:\\A\\a.png";dealFiles(path);}/*** 递归处理某路径下的所有文件,文件夹** @param clientBase*/public static void dealFiles(String clientBase) {File file = new File(clientBase);if (file.isDirectory()) {File[] files = file.listFiles();for (File item : files) {if (item.isDirectory()) {//继续读取目录下文件或文件夹dealFiles(item.getPath());} else {rmFile(item);}}// 检查文件夹是否为空,如果为空则删除if (file.list().length == 0) {file.delete();System.out.println("删除文件夹:" + file.getPath());}} else {rmFile(file);}}/*** 判断是否是以“.lastUpdated”结尾的文件,若是则删除* 或是“_remote.repositories”命名的文件,若是则删除** @param file*/public static void rmFile(File file) {if (file.getName().endsWith(".lastUpdated")) {file.delete();System.out.println("删除文件:" + file.getPath());} else if (file.getName().equals("_remote.repositories")) {file.delete();System.out.println("删除文件:" + file.getPath());}// 检查文件所在的文件夹是否为空,如果为空则删除File parentFile = file.getParentFile();if (parentFile.list().length == 0 && parentFile.exists()) {parentFile.delete();System.out.println("删除文件夹:" + parentFile.getPath());}}
}
是不是很简单,好啦,就分享到这里啦,看了这么久送你句良言:
看似寻常最奇崛,成如容易却艰辛。
不管用没有用,给个关注再走哈
更多推荐
java递归删除路径下的所有文件及文件夹
发布评论