getExternalFilesDir不创建新目录

时间:2014-04-13 22:15:06

标签: android file directory directory-structure

我正在检查是否存在SD卡上的子目录结构;
如果不是,则创建一个新的 这当然是在我的代码验证SD卡已安装并准备好之后。

我创建了WORKED的代码,并且我成功地在MY CELL PHONE&SD卡上创建了结构,所以我知道我的代码很好。然后我去睡觉了。第二天,我将我的TEST区域的工作代码移动到我的工作区域,现在它将无法工作! :-(我甚至将它移回测试区域,仍然没有工作!!

我猜测,晚上Android Gremlins做了一些破解密码的事情!

所以... Android Gremlins做了一些事情或者或许(这是一个很长的镜头)当我移动代码时,我可能已经忘记了一些东西。有没有人有任何Gremlin驱蚊剂?

我很确定工作的代码并且实际上创建了我现在可以在手机上看到的结构是这样的:


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访问之后)我试图将此测试和其他代码从我的测试区域移动到另一个区域,之后,它不再创建一个结构。

我和De-Bugger(即Gremlin Killer)一起步行,这就是发生的事情。

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  

IF ...。我使用前一天使用的原始名称" / 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  

现在......因为我们都知道,程序员永远不会破坏他们的代码,并且永远不会将错误引入“已知工作代码”中......它必须是Gremlins ......对??


第一次更新

@ChuongPham评论说我可能需要在清单文件中添加正确的权限。

由于代码DID WORK,这意味着我已经启用了此权限 但是,我决定删除这个权限,看看它会抛出什么错误,我认为没有许可就无法编译。然后我运行代码并且没有错误被抛出!!是的,它仍然不会创建新文件..

4 个答案:

答案 0 :(得分:3)

创建自定义目录非常简单。请检查以下代码:

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);

答案 1 :(得分:2)

如果您使用m_Context.getExternalFilesDir("MyDirectory/SubDir"),则会自动为您创建自定义目录。在API 19或更高版本上测试......

答案 2 :(得分:1)

也许您需要将此权限添加到AndroidManifest.xml文件中:

android.permission.WRITE_EXTERNAL_STORAGE

另外,请阅读here,了解有关API 19及更高版本的警告。

答案 3 :(得分:0)

你必须致电dir.mkdirs()来创建目录!!!