【发布时间】:2014-05-12 14:37:20
【问题描述】:
我找到了一段 Android(Java) 的代码,它在 sd-card 中搜索给定的文件名(字符串) 如果该文件存在于 sd 卡中,它可以正常工作,但如果没有具有该名称的文件,它将引发空指针异常。 任何人都可以帮助我吗?还是给我另一种选择? 这是代码:
public File findFile(File dir, String name) {
File[] children = dir.listFiles();
for(File child : children) {//the exception is thrown here!
if(child.isDirectory()) {
File found = findFile(child, name);
if(found != null) return found;
} else {
if(name.equals(child.getName())) return child;
}
}
return null;
}
这是 logcat 结果:
threadid=1: thread exiting with uncaught exception (group=0x400205a0)
FATAL EXCEPTION: main
java.lang.NullPointerException
at ir.zinutech.ssn.Settings.findFile(Settings.java:93)//>> which is "for(File child : children) { "
at ir.zinutech.ssn.Settings.findFile(Settings.java:95)//>> which is "File found = findFile(child, name);//the exception is thrown here!"
at ir.zinutech.ssn.Settings.onClick(Settings.java:69)
at android.view.View.performClick(View.java:2532)
at android.view.View$PerformClick.run(View.java:9293)`end`
【问题讨论】:
-
发布堆栈跟踪。无法在您指示的行处引发异常,因为没有调用空对象。 (唯一的调用是在
this上进行的,根据定义它不为空) -
@njzk2 我已经更新了问题
-
实际错误在
for(File child : children) {,表示null为children,表示dir不是目录,这种可能性不大。 -
@njzk2 那我应该怎么解决呢?有什么想法吗?
-
再次,您的异常与代码不匹配。第 93 行和第 94 行应该是一个接一个,但在您的代码中有
if(child.isDirectory()) {介于两者之间,这表明您实际上并未测试isDirectory,这确实解释了崩溃。请发布一致的代码和堆栈跟踪。