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设置路径