mkdir失败:EBUSY(设备或资源繁忙)

时间:2017-01-30 06:58:52

标签: android

我已编写代码来在内部sd中创建新文件夹,就像这样......

File MainDirectory = new File("/mnt/sdcard/app/");
    if(!MainDirectory.exists()){
        File DBDirectory = new File("/mnt/sdcard/app/database");
        File ProPicDirectory = new File("/mnt/sdcard/app/profilephoto");
        File ProPicTempDirecctory=new File("/mnt/sdcard/app/profilephoto/temp");
        File ReportPicDirectory = new File("/mnt/sdcard/app/reportphoto");
        File ReportThumbPicDirectory = new File("/mnt/sdcard/app/reportphoto/thumb");


        MainDirectory.mkdirs();
        DBDirectory.mkdir();
        ProPicDirectory.mkdir();
        ProPicTempDirecctory.mkdir();
        ReportPicDirectory.mkdir();
        ReportThumbPicDirectory.mkdir();
    }

这个代码完美地工作了两次,即使我通过文件管理器删除文件夹并删除应用程序,当我重新安装它工作正常。第三次发生此错误后....

I/System.out: mkdir failed: EBUSY (Device or resource busy) path = /mnt/sdcard/app
I/System.out: mkdir failed: EBUSY (Device or resource busy) path = /mnt/sdcard/app/database
I/System.out: mkdir failed: EBUSY (Device or resource busy) path = /mnt/sdcard/app/profilephoto
I/System.out: mkdir failed: EBUSY (Device or resource busy) path = /mnt/sdcard/app/profilephoto/temp
I/System.out: mkdir failed: EBUSY (Device or resource busy) path = /mnt/sdcard/app/reportphoto
I/System.out: mkdir failed: EBUSY (Device or resource busy) path = /mnt/sdcard/app/reportphoto/thumb

如何解决此问题。?

3 个答案:

答案 0 :(得分:0)

您可以尝试使用Environment.getExternalStorageDirectory()

 File MainDirectory = new File(Environment.getExternalStorageDirectory().toString()+ "/app");
    if(!MainDirectory.exists()){
        File DBDirectory = new File(MainDirectory+"/database");
        File ProPicDirectory = new File(MainDirectory+"/profilephoto");
        File ProPicTempDirecctory = new File(ProPicDirectory+"/temp");
        File ReportPicDirectory = new File(MainDirectory+"/reportphoto");
        File ReportThumbPicDirectory = new File(ReportPicDirectory+"/thumb");


        MainDirectory.mkdirs();
        DBDirectory.mkdir();
        ProPicDirectory.mkdir();
        ProPicTempDirecctory.mkdir();
        ReportPicDirectory.mkdir();
        ReportThumbPicDirectory.mkdir();
    }

这对我来说很好。

希望它有所帮助。

答案 1 :(得分:0)

确保您拥有写入和读取存储空间的权限。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

再次检查。

答案 2 :(得分:0)

所以事情是文件或目录被系统或其他进程锁定。

我是如何得出这个结论的?

好吧,在我的应用程序的上一个版本中,我在根目录中创建了一个包含数据文件(包括媒体文件)的隐藏目录。然后我决定不让它隐藏起来。我的测试设备突然崩溃了。我将文件夹改回隐藏状态,然后又恢复了工作。

因此,如果没有进程访问该目录,可能是Android系统扫描媒体文件并让Google知道什么。也许一个.nomedia文件可以解决这个问题(我没试过),但如果你对资源没有控制权,你就不会再这么做了。