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

问题描述 投票:0回答:3

我已经编写了代码来在内部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

我该如何解决这个问题。

android
3个回答
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();
    }

它对我来说很好。

希望能帮助到你 。


0
投票

确保您具有写入和读取存储的权限。

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

再检查一遍。


0
投票

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

我是怎么得出这个结论的?

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

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

© www.soinside.com 2019 - 2024. All rights reserved.