Java Android MKDirs()不适用于我-不适用于外部存储

Java Android MKDirs()不适用于我-不适用于外部存储,java,android,mkdirs,Java,Android,Mkdirs,我已经阅读了关于这个的各种其他帖子,还没有找到一个适合我的答案。他们一直在讨论外部存储的使用,我需要使用“默认”(内部)存储 我有一个非常简单的日常活动 String PATH = "/data/data/com.mydomain.myapplicationname/files"; SystemIOFile.MkDir(PATH); // Ensure Recipient Path Exists 然后在我的SystemIOFile类中 static public Boolean MkDir(

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

我有一个非常简单的日常活动

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" />
始终返回false
随后的Dir.mkdirs()总是返回false

我错过了什么

"/data/data/com.mydomain.myapplicationname/files"
不是外部存储路径。您需要做的是获取应用程序分配的存储路径

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

代码基本相同:

Context c = /*get your context here*/;
File path = new File(c.getFilesDir().getPath() + "/folder1/folder2/"); //this line changes
path.mkdirs();
不是外部存储路径。您需要做的是获取应用程序分配的存储路径

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

代码基本相同:

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);
返回false,而:

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

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

希望这有帮助。

这是一个很好的问题。 首先,最好不要直接引用
/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)
的结果



希望这能有所帮助。

谢谢您的回复。我的任务是为现有的Android应用程序制作MOD,而这个目录正是他们已经在使用的——所以我很犹豫是否要更改它。如果它不是一个外部存储区域,我如何制作所需的目录?我建议使用
文件
对象而不是
字符串
文件路径=新文件(c.getExternalFilesDir(),“/folder1/folder2/”
@Dhugalmac我敢肯定,在内部存储(在外部存储上,我相信这是公平的游戏)中修改任何不是你的东西是“非法的”@Jeeter-Android应用程序是我们公司的应用程序。以前的开发者已经不在了。我不想破坏已经在工作的部分——只想添加新的功能。作为Android开发的新手,我想了解如何使用已经存在的目录结构(和位置)。@TedHopp-我不是已经在MkDir()函数中使用文件对象了吗?谢谢你的回复。我的任务是为现有的Android应用程序制作MOD,而这个目录正是他们已经在使用的——所以我很犹豫是否要更改它。如果它不是一个外部存储区域,我如何制作所需的目录?我建议使用
文件
对象而不是
字符串
文件路径=新文件(c.getExternalFilesDir(),“/folder1/folder2/”
@Dhugalmac我敢肯定,在内部存储(在外部存储上,我相信这是公平的游戏)中修改任何不是你的东西是“非法的”@Jeeter-Android应用程序是我们公司的应用程序。以前的开发者已经不在了。我不想破坏已经在工作的部分——只想添加新的功能。作为Android开发的新手,我想了解如何使用已经存在的目录结构(和位置)。@TedHopp-我不是已经在MkDir()函数中使用文件对象了吗?可能重复的可能重复的感谢您的回复。如果根据上面其他人所说的,/data/data/目录不是外部存储位置,则不会基于环境设置路径。getExternalStorageDirectory().getPath()将我指向错误的位置?
/data/data
不是外部存储位置,然而,
/storage/emulated/0/data/data
例如,我再次感谢您的回复。既然您说/data/data不是一个外部存储位置,而这是我不想更改的应用程序中当前使用的目录位置,我该如何创建该目录(或确保已创建该目录)?实际上
/data/data
是您设备内部存储的一部分,以及所有应用程序的安装位置。除非有根设备,否则无法直接浏览。至于它指向哪里,它只是指向你内部存储的一部分。再次感谢你的回复。我不想浏览目录。相反,我需要以编程方式确保它存在,以便我可以将一个或多个下载的文件保存到其中,以供应用程序本身稍后检索。谢谢您的回复。如果根据上面其他人所说的,/data/data/目录不是外部存储位置,则不会基于Environment.getExternalStorageD设置路径