问题描述
我试图在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的确看起来有些变化。
有人会告诉我哪一个是哪一个吗?
1楼
我会更加防御,并以此方式编写:
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上常用的日志记录解决方案?
2楼
由于SD卡不可用,您可能会得到null pointer exceptions
(也许是因为调试时手机已连接到PC?)
我之前也遇到过类似的错误,这就是原因。