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

标签 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 block 中才能捕获异常。

我已经在同一类型的主题上尝试了大约六种排列,上面是我能想到的最温和、最安全的排列,但它们都抛出了这个错误。我要么在做一些愚蠢的事情,要么在模拟器的 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 上常用的日志记录解决方案?

关于Java/Android递归文件空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5466266/

相关文章:

java - 入队和出队程序运行只是无法弄清楚为什么输出不匹配

android - 字节数组到二维数组

haskell - 使用 scanl Haskell 计算斐波那契数的大 0

android - 从我的 asynctask 调用的方法必须是静态的

android - onConfigurationChanged后如何获取GridView的宽高

c - 如何显示带有移动比率的数字之和?

javascript - Promise & Recursion,如何在没有回调的情况下处理找到的项目?

java - Java中的递归Chudnovsky算法

java - 如何在 Android 中获取两个日期(开始和结束)之间的特定日期列表?

java - 如何直接从文件向 Java 中的 ArrayList 添加项目?