做项目当时,碰到一个问题:存储到本地的文件 ,然后读取后,调用file.delete()一直无法删除,返回false。经过多次尝试,找到了问题,做下记录。
1.删除目录
当File file = new File(path) 中的path不是文件而是目录时,这个当前的目录必须为空目录才行,如果有其他的文件或者文件夹,则会失败。
private void deleteFile(File file) {
// 将file子目录及子文件放进文件数组
File[] files = file.listFiles();
// 如果包含文件进行删除操作
if (files != null) {
for (int i = 0; i < files.length; i++) {
// 删除子文件
if (files[i].isFile()) {
files[i].delete();
} else if (files[i].isDirectory()) {
// 通过递归方法删除子目录的文件
deleteFile(files[i]);
}
// 删除子目录
files[i].delete();
}
}
}
方法调用:
File basefile = new File(path);
deleteFile(basefile);
2.没有关闭流
必须把所有的输入流和输出流关闭后,才能删除文件,不然文件资源一直被占用就无法删除,在调用file.delete()方法前 ,调用IO流的close()方法即可。
3.显式调用gc()
如果排除了都不是上述问题的话,那就只有尝试调用System.gc() 建议JVM进行垃圾回收了,但是这个不是百分之百执行,所以也不一定会成功,加到delete()语句前面即可。
public static boolean deleteFile(File file){
// 路径为文件且不为空则进行删除
if (file.isFile() && file.exists()) {
//加上确保文件能删除,不然可能删不掉
System.gc();
boolean flag = file.delete();
}
}