Java / Android递归文件空指针异常

时间:2011-03-28 23:34:58

标签: java android recursion

我正试图在Android模拟器上递归获取Java中的目录结构,我认为这是一个非常简单的代码:

public void list(File file) 
{
    if(file.isDirectory())
    {
       File[] children = file.listFiles();
       for(int i = 0; i < children.length; i++)
       {
           Log.d(TAG, children[i].getName());
           list(children[i]);
       }
    }
}

它运行正常(到目前为止),除非我在模拟器的SD卡的根目录中运行它,此时它会抛出空指针异常。 LogCat声称它在方法调用时抛出,但我必须将整个for循环包装在try / catch块中以捕获异常。

我在同一主题上尝试了大约六种排列,上面是我能提出的最平淡和最安全的,但他们都抛出了这个错误。我要么做一些愚蠢的事情,要么潜伏在模拟器SD卡的根目录中的奇怪物体报告为目录,但返回伪造的值为.listFiles()。那.android_security肯定看起来有点狡猾。

有人会非常友好地告诉我哪一个,如果是其中之一,那么?

2 个答案:

答案 0 :(得分:3)

我会更加防守并以这种方式写下来:

public void list(File file) 
{
    if (file != null && file.isDirectory())
    {
       File[] children = file.listFiles();
       if (children != null)
       {
           for(int i = 0; i < children.length; i++)
           {
               if (children[i] != null)
               {
                   Log.d(TAG, children[i].getName());
               }
               list(children[i]);
           }
        }
    }
}

有趣的是:那个Log类是你的,还是Android上常用的日志解决方案?

答案 1 :(得分:1)

您可能会收到null pointer exceptions,因为SD卡不可用(可能是因为您的手机在调试时已连接到您的电脑?)

之前我遇到过类似的错误,这就是原因。