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());
}
}
}
是不是很简单,好啦,就分享到这里啦,看了这么久送你句良言:
看似寻常最奇崛,成如容易却艰辛。
不管用没有用,给个关注再走哈