Android MKDirs()不适合我 - 不是外部存储

时间:2015-08-17 16:55:30

标签: java android mkdirs

我已经阅读了其他各种帖子,但还没有找到适合我的答案。他们一直在讨论外部存储的使用,我需要使用'默认' (内部)存储。

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

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

始终返回 false
后续 Dir.mkdirs()始终返回 false

我错过了什么?

2 个答案:

答案 0 :(得分:2)

excapeXml="true"

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

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

如果您需要访问应用程序的内部文件空间(如果应用程序访问该空间拥有它),那么您可以使用Context c = /*get your context here*/; File path = new File(c.getExternalFilesDir().getPath() + "/folder1/folder2/"); path.mkdirs(); 的{​​{3}}。这将返回应用程序的内部存储位置。

代码基本相同:

Context

答案 1 :(得分:2)

这是一个很好的问题。 首先,如果您不直接引用if (mysql_num_rows($exe)> 0) { $response['error'] = 'false'; $response['forum'] = Array(); while($result = mysql_fetch_array($exe)){ $response['forum'][] = Array( 'uid' => $result['uid'], 'class_divisionId' => $result['class_divisionId'], 'username' => $result['username'], 'description' => $result['description'], 'date_time' => $result['date_time'], 'name' => $result['name'] ); } return $response; } else { return false; } 路径,那就更好了。请改用/sdcard。 其次,假设您想要访问自己的应用程序文件 - 您也不希望直接引用Environment.getExternalStorageDirectory().getPath()路径,因为它可能会在多用户方案中有所不同。请改用/data/data

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

Context.getFilesDir().getPath()

返回 false ,而:

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

返回 true

另请注意,您忽略了String PATH = Environment.getExternalStorageDirectory().getPath() + getApplicationContext().getFilesDir().getPath(); SystemIOFile.MkDir(PATH); Dir.mkdirs()的结果。

希望这有帮助。