gpt4 book ai didi

java - 递归搜索目录,但系统目录出现 NullPointerException

转载 作者:行者123 更新时间:2023-12-01 18:42:01 25 4
gpt4 key购买 nike

我使用此代码在给定目录中递归搜索特定文件模式:

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)是:

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 中进行过测试,但我认为那里没有出现问题)

最佳答案

if (file.listFiles() == null) {
System.out.println("yes it is null");
continue;
}

当您发现该目录不包含任何文件时,只需继续到循环开始并检查其他目录。

因此,当您的逻辑发现任何目录不包含任何文件时,您将在检查后跳过所有处理(foreach 循环),并且您将避免 NullPointerException 并成功跳过当前目录。

循环中先决条件测试的标准方法

foreach(.....){

//check for preconditions
continue; // if preconditions are not met

//do processing

}

关于java - 递归搜索目录,但系统目录出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19588606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com