我已阅读了有关此问题的其他各种帖子,但尚未找到对我有用的答案。他们一直在讨论外部存储的使用,我需要使用“默认”(内部)存储。

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

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


然后在我的SystemIOFile类中

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())


总是返回假
并且随后的Dir.mkdirs()始终返回false

我想念什么?

最佳答案

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

实现以上内容,我们看到:

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


返回false,而:

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


返回true。

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

希望这可以帮助。

10-08 17:43