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 的应用程序拥有它)那么您可以使用 Context
的 getFilesDir()
.这将 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()
的结果。
希望对您有所帮助。
我已经阅读了关于此的各种其他帖子,但尚未找到适合我的答案。他们一直在讨论外部存储的使用,我需要使用'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 的应用程序拥有它)那么您可以使用 Context
的 getFilesDir()
.这将 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()
的结果。
希望对您有所帮助。