刪除一個文件,再從新下載這個同名文件,保存到sdcard時出現error,部分手機出現java
Caused by: libcore.io.ErrnoException: open failed: EBUSY (Device or resource busy)
at libcore.io.Posix.open(Native Method)
at libcore.io.BlockGuardOs.open(BlockGuardOs.Java:110)
at java.io.File.createNewFile(File.java:941)android
此問題在小米3,華爲系列手機出現機率較大。
文件建立失敗的緣由是,文件被刪除後仍然被其餘進程佔用。
進入adb shell,經過lsof命令查看佔用該文件的進程。
聽說這是Android文件系統的bug,建議刪除文件前先將該文件進行重命名:shell
刪除文件安全方式:安全
private void deleteFile(File file) {
if (file.isFile()) {
deleteFileSafely(file);
return;
}
if (file.isDirectory()) {
File[] childFiles = file.listFiles();
if (childFiles == null || childFiles.length == 0) {
deleteFileSafely(file);
return;
}
for (int i = 0; i < childFiles.length; i++) {
deleteFile(childFiles[i]);
}
deleteFileSafely(file);
}
}.net
/**
* 安全刪除文件.
* @param file
* @return
*/
public static boolean deleteFileSafely(File file) {
if (file != null) {
String tmpPath = file.getParent() + File.separator + System.currentTimeMillis();
File tmp = new File(tmpPath);
file.renameTo(tmp);
return tmp.delete();
}
return false;
}進程