我正在使用此代码在给定目录中递归搜索特定文件模式:
if (file.isDirectory()) {
System.out.println("Searching directory ... "
+ file.getAbsoluteFile());
if (file.canRead()) {
System.out.println("Can read...");
if (file.listFiles() == null) {
System.out.println("yes it is null");
}
for (File temp : file.listFiles()) { // Problemetic line
if (temp.isDirectory()) {
search(temp);
} else {
// code to find a file
}
}
}
上面的代码输出我这样(我也得到例外):
Searching directory ... C:\swsetup\SP46840\Lang\zh-TW
Can read...
Searching directory ... C:\System Volume Information
Can read...
yes it is null
例外是:
Exception in thread "main" java.lang.NullPointerException
at Demo.search(Demo.java:61)
at Demo.search(Demo.java:63)
在我的代码中,该行指向:(file.listFiles())
,因为它试图从系统目录中获取文件列表,如“系统卷信息”。我假设因为它是一个系统目录,所以可能会发生一些我不知道的问题。
我的问题是:
NullPointerException
循环继续发生foreach
?有人可以指导我吗?注意:这种情况发生在Windows XP中(几个月前我在Windows 7中进行了测试,但我认为在那里没有发生问题)
答案 0 :(得分:2)
if (file.listFiles() == null) {
System.out.println("yes it is null");
continue;
}
当您发现该目录不包含任何文件时,只需continue
到循环开始并检查其他目录。
因此,当您的逻辑发现任何目录不包含任何文件时,使用此方法,您将在此检查后跳过所有处理(foreach循环),并且您将避免NullPointerException
并成功跳过当前目录。 / p>
foreach(.....){
//check for preconditions
continue; // if preconditions are not met
//do processing
}
答案 1 :(得分:1)
试试这个:
if (file.isDirectory()) {
System.out.println("Searching directory ... "
+ file.getAbsoluteFile());
if (file.canRead()) {
System.out.println("Can read...");
if (file.listFiles() == null) {
System.out.println("yes it is null");
} else { /* add the else */
for (File temp : file.listFiles()) { // Problemetic line
if (temp.isDirectory()) {
search(temp);
} else {
// code to find a file
}
}
}
}
答案 2 :(得分:1)
:
An array of abstract pathnames denoting the files and directories in the directory denoted by this abstract pathname. The array will be empty if the directory is empty. Returns <code>null</code> if this abstract pathname does not denote a directory, or if an I/O error occurs.
因此,最好检查Narendra Pathai的anwser中的null和使用方法