使用场景:下载PDF文件,转成图片,然后打印,打印成功后需要将下载的PDF文件和图片全部删除,之前程序一直跑着是没问题的,忽然就出现了问题,debug跟踪下,发现问题出在了下载PDF文件时,如果第一次下载成功了,第二次在下载就会失败,并且会报open failed: EBUSY (Device or resource busy)这个错误,翻译:文件或文件路径忙;
百度下,很多人说是Android系统的bug,删除文件时需要将文件重命名,然后在删除,但是这个方法试了,没有作用;
后来同事一起讨论,得出结论:确实是出在了删除文件这个步骤,删除文件后,文件路径或者文件没有得到释放,从而导致下次再下载文件时,将文件写到这个路径中是写不进去的,也就是文件或文件路径正忙的Exception;
如果你也遇到这个问题,首先不放先将删除文件的方法注释,已确认是否为问题出现在这里;如果出现在这里,可以尝试一下方法来删除,我测试是可以的;
private void deleteFile(File file) {
if (file.isDirectory()) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
File f = files[i];
deleteFile(f);
}
//file.delete();//如要保留文件夹,只删除文件,请注释这行
} else if (file.exists()) {
file.delete();
}
}
以上,供大家参考~