当前位置: 代码迷 >> java >> Java / Android递归文件空指针异常
  详细解决方案

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

热度:79   发布时间:2023-07-27 09:48:05.0

我试图在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的确看起来有些变化。

有人会告诉我哪一个是哪一个吗?

我会更加防御,并以此方式编写:

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上常用的日志记录解决方案?

由于SD卡不可用,您可能会得到null pointer exceptions (也许是因为调试时手机已连接到PC?)

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

  相关解决方案