您的位置:首页 > 移动开发 > Android开发

android删除文件出错

2015-06-11 12:32 441 查看
当删除一个文件,再重新下载这个同名文件,保存到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;

    }


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: