我正在尝试检查SD卡上是否存在子目录结构
如果不是,则创建一个新的
当然,这是在我的代码验证SD卡已安装并准备就绪之后。
我创建了有效的代码,并在我的手机SD卡上成功创建了结构,所以我知道我的代码很好。然后我上床睡觉了。第二天,我把工作代码从测试区移到了工作区,现在它不工作了!!:-(我甚至把它移回了测试区,仍然没有工作!!
我猜安卓小精灵在晚上做了一些破坏代码的事情!!
所以。。。要么是安卓Gremlins做了什么,要么(这是一个很长的机会)我可能在移动代码时忘记了什么。有人有驱蚊剂吗??
我敢肯定,我现在可以在手机上看到的代码是这样的:
String strPathName = m_Context.getExternalFilesDir (null) .toString ();
// This DOES give the Correct Path on the SD Card
File dir;
dir = new File (m_Context.getExternalFilesDir (null) + "/MyDirectory");
dir = new File (m_Context.getExternalFilesDir (null) + "/MyDirectory/SubDir");
dir = new File (m_Context.getExternalFilesDir (null) + "/MyDirectory/SubDir/xxx");
在我的手机上,我可以清楚地看到这个结构。它现在还在那里!!
第二天,(即,在Android Gremlins访问后)我试图将此代码和其他代码从我的测试区域移动到另一个部分,之后,它将不再创建结构。
我和德布格(即小妖精杀手)一起走过来,下面是发生的事情
File dir;
boolean bDirExists;
dir = new File (m_Context.getExternalFilesDir (null) + "/NewDirectory");
bDirExists = (dir.exists () && dir.isDirectory () ); // FALSE
dir = new File (m_Context.getExternalFilesDir (null) + "/NewDirectory/SubDir");
bDirExists = (dir.exists () && dir.isDirectory () ); // FALSE
bDirExists = dir.exists (); // FALSE
bDirExists = dir.isDirectory (); // FALSE
dir = new File (m_Context.getExternalFilesDir (null) + "/NewDirectory/SubDir/xxx");
bDirExists = (dir.exists () && dir.isDirectory () ); // FALSE
如果…。我使用前一天使用的原始名称"/MyDirectory/SubDir/xxx")
然后代码指示目录确实存在
dir = new File (m_Context.getExternalFilesDir (null) + "/MyDirectory");
bDirExists = (dir.exists () && dir.isDirectory () ); // TRUE
dir = new File (m_Context.getExternalFilesDir (null) + "/MyDirectory/SubDir");
bDirExists = (dir.exists () && dir.isDirectory () ); // TRUE
bDirExists = dir.exists (); // TRUE
bDirExists = dir.isDirectory (); // TRUE
现在…众所周知,程序员从不破坏他们的代码,也从不在"已知的工作代码"中引入错误,所以…。一定是小精灵…。正确的
首次更新
@ChuongPham评论说,我可能需要在清单文件中添加正确的权限。
由于代码确实有效,这意味着我已经启用了此权限
然而,我决定删除这个权限,看看它会引发什么错误,我认为没有这个权限就不会编译。然后我运行了代码,没有出现任何错误!!是的,它仍然不会创建新文件。。
如果使用m_Context.getExternalFilesDir("MyDirectory/SubDir")
,则会自动为您创建自定义目录。在API 19或更高版本上测试。。。
创建自定义目录非常简单。请检查以下代码:
File folder = new File(context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS), "Your directory name");
if (!folder.exists()) {
folder.mkdirs();
}
File filename = new File(folder, "Your file name");
OutputStream out = new FileOutputStream(filename);
也许您需要将此权限添加到AndroidManifest.xml文件中:
android.permission.WRITE_EXTERNAL_STORAGE
此外,请阅读此处了解有关API 19及更高版本的注意事项。
必须调用dir.mkdirs()
才能创建目录!!!