我试图递归获得Java中的目录结构,在Android模拟器,用我认为是一个代码相当简单一点:的Java/Android的递归文件空指针异常
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肯定看起来有点时髦。
难道有人会告诉我哪个是哪一个?
其他人回答了这个问题(空检查),但这是原因。如果出于某种原因无法列出文件,File.listFiles()将返回null(而不是空数组)。一个例子可能是安全权限禁止,另一个可能是无效的符号链接。出于某种原因,尽管类中的其他方法在类似的情况下执行,但它不会抛出java.io.IOException。 – 2011-03-28 23:45:43