安卓文件安全删除问题 --- java.io.IOException: open failed: EBUSY (Device or resource busy) (System.err)

时间:2022-09-28 20:32:44

【出错打印】

java.io.IOException: open failed: EBUSY (Device or resource busy)  (System.err)


【场景回放】

项目中,本人先生成一系列文件,然后把这一系列文件通过socket网络,发送给服务器。发送完毕之后,删除这一系列文件。这就算一个回合。

当再次进入第二个回合的时候,发现,报了上面所出现的警告,错误。


【解决措施】

原因是,这时候需要用到安全删除问题。具体的原因也没有搞清楚,只是换了以下接口之后,错误就没有了。

1.安全删除接口:

   /**
* @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;
}


2.文件删除接口:

   /***
* @decription 指定的文件存在,就删除; 不存在,不做处理
* @param file 文件
* @Time 2015.7.17 11:38
* @author zgx
* */
public static void deleteExistingFile(File file){
if(file == null){
Log.e(TAG, "DeleteExistingFile():file == null");
return;
}
if(file.exists()){
Log.e(TAG, "deleteExistingFile : file " + file.getAbsolutePath() + " has been delete !! ");
// file.delete();
deleteFileSafely(file);
return;
}
}

3.文件夹递归删除接口:

/**
* 递归删除文件和文件夹
* @param file 要删除的根目录
*
*/
@SuppressWarnings("unused")
public static void RecursionDeleteFile(File tempfile){

File file = new File(tempfile.getAbsolutePath() + System.currentTimeMillis());
if(file.exists())
file.renameTo(file);

//是否存在
if(file == null || !file.exists()){
if(DEBUG)
Log.e(TAG, "RecursionDeleteFile: file = null ");
return ;
}
Log.i(TAG, "RecursionDeleteFile : file = " + file.getAbsolutePath());

//是文件,就删除
if(file.isFile()){
// file.delete();
deleteFileSafely(file);
return ;
}

//是目录 -- 递归
if(file.isDirectory()){
//列出所有的文件
File[] childFile = file.listFiles();
//文件夹空
if(childFile == null || childFile.length == 0){
file.delete();
return ;
}
//文件夹不为空,循环递归
for(File f : childFile){
RecursionDeleteFile(f);
}
file.delete();
}

}