当删除一个文件,再重新下载这个同名文件,保存到sdcard时出现error,部分手机出现


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)



此问题在小米3,华为系列手机出现概率较大。
文件创建失败的原因是,文件被删除后仍然被其他进程占用。
进入adb shell,通过lsof命令查看占用该文件的进程。
据说这是android文件系统的bug,建议删除文件前先将该文件进行重命名:



删除文件安全方式:

 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);
        }
    }


    /**
     * 安全删除文件.
     * @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;
    }



更多相关文章

  1. android studio 无法在可视化页面预览布局文件
  2. Android 华为应用角标
  3. Gradle配置文件详解
  4. Android对APK文件的安装和卸载
  5. android aidl文件分析
  6. 在Mac上完全删除android studio初始配置文件
  7. 杀掉指定进程
  8. android 开发中的文件操作

随机推荐

  1. 学习Android(安卓)Studio开发工具之Activ
  2. Android(安卓)自定义日期控件 (仿QQ,IOS7
  3. Android推送服务开发
  4. android中进程优先级问题
  5. 解剖Android联系人之一,基于2.1
  6. 一个android文本比对APP的实现(三)-设计模式
  7. Android(安卓)Training - 管理应用的内存
  8. 济南android培训机构应该如何来选择?
  9. Android中的Toast重复显示的问题
  10. [置顶] Android(安卓)中VelocityTracker