getExternalFilesDir未创建新目录



我正在尝试检查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()才能创建目录!!!

相关内容

  • 没有找到相关文章

最新更新