我正在学习Java I/O,有一个练习是查找目录中的最大和最小文件
C:\Windows
我编写了以下程序,但编译器提示:
Exception in thread "main" java.lang.NullPointerException
at file.TestFile.compareFile(TestFile.java:25)
at file.TestFile.compareFile(TestFile.java:27)
at file.TestFile.compareFile(TestFile.java:27)
at file.TestFile.main(TestFile.java:18)
这是我的代码:
package file;
import java.io.File;
import java.io.IOException;
public class TestFile {
static double MaxSize = 0;
static double MinSize = Double.MAX_VALUE;
static File MaxFile = null;
static File MinFile = null;
public static void main(String[] args) throws IOException {
File f = new File("C:\\Windows");
File[] fs = f.listFiles();
// System.out.println(fs[10]);
// if (true)
// return;
compareFile(fs);
System.out.printf("The maxi file is %s, its size is %,d bytes", MaxFile.getAbsolutePath(), MaxSize);
System.out.printf("The mini file is %s, its size is %,d bytes", MinFile.getAbsolutePath(), MinSize);
}
public static void compareFile(File[] files) {
for (File x : files) {
if (x.isDirectory())
compareFile(x.listFiles());
if (MaxSize < x.length()) {
MaxSize = x.length();
MaxFile = x;
}
if (MinSize > x.length() && x.length() != 0) {
MinSize = x.length();
MinFile = x;
}
}
}
}
令我困惑的是,当我添加 3 行调试代码(此处注释掉)时,fs
不是空指针。可以得到File
元素
最佳答案
错误不在main内部,而是在compareFile方法中。当您最终递归地调用它时,您可能会发现自己位于一个没有文件的文件夹中。在这种情况下,您可以使用 x.listFiles() 作为参数调用compareFile(),在这种情况下该参数将为空。
要修复该错误,只需检查 files == null 是否存在,并在compareFile 方法开始时返回。
关于java - 当我在该程序中使用文件数组作为方法参数时,为什么会显示 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46276528/