【问题标题】:Why can i not make a directory inside Environment.DIRECTORY_PICTURES?为什么我不能在 Environment.DIRECTORY_PICTURES 中创建目录?
【发布时间】:2015-01-25 17:53:37
【问题描述】:

这是我的代码

File selfieLocation = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES),
               "Daily Selfies");
boolean isDirectory = false;
if(!selfieLocation.isDirectory()) {
        //Creates directory named by this file
        selfieLocation.mkdir();
        isDirectory = selfieLocation.isDirectory();
 }
 //array of strings 
 for(String selfiePath: selfieLocation.list()) {
        selfies.add(selfiePath);
 }

基本上,我要做的是在标准目录中创建自己的可自定义目录,用于放置用户可用的图片。

我查看了相关线程并看到了这个,Android: unable to create a directory in default pictures folder。但是,我确保我调用了 getExternal....,而不仅仅是将 Environment.DIRECTORY_PICTURES 作为参数。 我还查看了http://developer.android.com/guide/topics/data/data-storage.html#filesExternal 并看到我有正确的方法调用/格式来在外部存储器中创建一个可自定义的文件夹。文档示例是

File file = new File(Environment.getExternalStoragePublicDirectory(
        Environment.DIRECTORY_PICTURES), albumName);
if (!file.mkdirs()) {
    Log.e(LOG_TAG, "Directory not created");
}

我单步执行了我的代码,发现即使在调用 selfieLocation.mkdir() 之后,局部变量 isDirectory 仍保持为 false。有谁知道这个目录为什么不能创建?

【问题讨论】:

    标签: android external mkdir


    【解决方案1】:

    尝试使用File#mkdirs() 而不是File#mkdir() 创建目录。后者假定所有父目录都已就位,因此如果其任何父目录不存在,它将不会创建目录。
    另外,请查看您在AndroidManifest.xml 中的权限。您需要以下权限才能读取/写入外部存储上的内容:

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

    android.permission.READ_EXTERNAL_STORAGE 目前不需要,但在未来的 Android 版本中需要it will be

    【讨论】:

    • 权限不是问题,因为我有这个权限并且没有遇到安全异常。 mkdirs 也没有工作。在这种情况下,父级确实存在(getExternalFilesDir(Environment.DIRECTORY_PICTURES)
    • 顺便问一下,如果您认为这个问题是个好问题,您能投赞成票吗?我有被禁止提问的危险,所以我努力确保从现在开始通过研究提出好的问题。
    • 我已经尝试重现您的错误,并且在模拟器上一切正常。问题必须在其他地方。每当我看到一个我可能感兴趣的问题时,我都会投赞成票。这是一个很好的问题,需要进行研究,但在我看来这并不有趣。
    • 是的,问题是当我将手机的外部媒体插入计算机的 USB 时,它甚至没有安装。这很令人沮丧
    猜你喜欢
    • 2012-11-22
    • 2011-07-13
    • 2015-05-02
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多