【发布时间】:2011-03-28 23:34:57
【问题描述】:
我正在尝试在 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 看起来确实有点诡异。
谁能告诉我是哪一个?
【问题讨论】:
-
其他人回答了这个问题(空检查),但这就是原因。
File.listFiles()如果由于某种原因无法列出文件,将返回 null(而不是空数组)。一个例子可能是安全权限禁止它,另一个可能是无效的符号链接。出于某种原因,这不会抛出java.io.IOException,尽管类上的其他方法在类似情况下也会这样做。