我已阅读了有关此问题的其他各种帖子,但尚未找到对我有用的答案。他们一直在讨论外部存储的使用,我需要使用“默认”(内部)存储。
我的一个活动例程中有一个非常简单的例程
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)
的结果。希望这可以帮助。