我正试图在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肯定看起来有点狡猾。
有人会非常友好地告诉我哪一个,如果是其中之一,那么?
答案 0 :(得分:3)
我会更加防守并以这种方式写下来:
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上常用的日志解决方案?
答案 1 :(得分:1)
您可能会收到null pointer exceptions
,因为SD卡不可用(可能是因为您的手机在调试时已连接到您的电脑?)
之前我遇到过类似的错误,这就是原因。