Android MKDirs() 对我不起作用 - 不是外部存储

Android MKDirs() not working for me - NOT EXTERNAL Storage

我已经阅读了关于此的各种其他帖子,但尚未找到适合我的答案。他们一直在讨论外部存储的使用,我需要使用'default'(内部)存储。

我的 Activity 例程中有一个非常简单的例程

String PATH = "/data/data/com.mydomain.myapplicationname/files";
SystemIOFile.MkDir(PATH);  // Ensure Recipient Path Exists

然后在我的 SystemIOFile class 我有

static public Boolean MkDir(String directoryName) 
  {
    Boolean isDirectoryFound = false;
    File Dir = new File(directoryName);
    if(Dir.isDirectory())
    {
      isDirectoryFound = true;
    } else {
      Dir.mkdirs();
      if (Dir.isDirectory()) 
      {
         isDirectoryFound = true;
      }
  }
  Dir = null;
  return isDirectoryFound;
}

而在我的 Android.Manifest.xml 我有

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

所以似乎所有的部分都已准备就绪,可以让它发挥作用。

但是它不起作用。
当我单步执行 MKDir() 例程时,它总是失败。

if (Dir.isDirectory())

总是returns错误
而随后的Dir.mkdirs()总是returnsfalse

我错过了什么?

"/data/data/com.mydomain.myapplicationname/files"

不是外部存储路径。您需要做的是获取应用程序的分配存储路径。

Context c = /*get your context here*/;
File path = new File(c.getExternalFilesDir().getPath() + "/folder1/folder2/");
path.mkdirs();

如果您需要访问应用程序的内部文件space(前提是访问 space 的应用程序拥有它)那么您可以使用 ContextgetFilesDir() .这将 return 应用程序的内部存储位置。

代码基本相同:

Context c = /*get your context here*/;
File path = new File(c.getFilesDir().getPath() + "/folder1/folder2/"); //this line changes
path.mkdirs();

这是一个很好的问题。 首先,最好不要直接引用 /sdcard 路径。请改用 Environment.getExternalStorageDirectory().getPath()。 其次,假设您想访问自己应用程序的文件 - 您也不想直接引用 /data/data 路径,因为它在 多用户场景 中可能会有所不同。请改用 Context.getFilesDir().getPath()

执行上面的代码,我们看到:

String PATH = "/data/data/com.mydomain.myapplicationname/files";
SystemIOFile.MkDir(PATH);

Returns false,而:

String PATH = Environment.getExternalStorageDirectory().getPath() 
        + getApplicationContext().getFilesDir().getPath();
SystemIOFile.MkDir(PATH);

Returns .

另请注意,您忽略了 Boolean MkDir(String directoryName)Dir.mkdirs() 的结果。

希望对您有所帮助。