代码如下:
/**
* 删除文件夹下所有子孙文件
* 优点:不产生新对象,对内存友好
* 缺点:不能删除子孙文件夹
* @param path
*/
public static void delDirAndFile(Path path){
boolean directory = Files.isDirectory(path);
try {
if(directory){
List<Path> collect = Files.list(path).collect(Collectors.toList());
if(collect.size()==0){
Files.deleteIfExists(path);
}else {
collect.forEach(childPath-> delDirAndFile(childPath));
// 不删除文件夹,java内部的bug,删除返回成功,但并未真正删除
//Files.deleteIfExists(path);
}
}else {
Files.deleteIfExists(path);
}
}catch (Exception e){
e.printStackTrace();
}
}
/**
* 深度删除文件夹
* 优点:可以删除所有的子孙文件夹及文件
* 缺点:有多少个文件就会new多少个对象,且在方法执行完才会释放
* @param dirPath
*/
public static void deleteDir(String dirPath) {
File file = new File(dirPath);
if (file.isFile()) {
file.delete();
} else {
File[] files = file.listFiles();
if (files == null) {
file.delete();
} else {
for (int i = 0; i < files.length; i++) {
deleteDir(files[i].getAbsolutePath());
}
file.delete();
}
}
}
使用第一个方法,调试了很久也没找到解决方案。删除空文件夹明明返回的true,但是就是没有删掉,这个使用手动也删除不了。应该是被占用了,不知道有没有大神知道为什么?如何处理;于是,第一个删除文件的方法被阉割了,只能删除文件不能删除文件夹