java - 当我在该程序中使用文件数组作为方法参数时,为什么会显示 NullPointerException?

标签 java io

我正在学习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/

相关文章:

java - Java (Scala) 中此散列代码的等效 SQL 代码是什么

java - 分离时惰性(未加载)集合上的 JPA 调用方法在 Eclipselink 中无法按预期工作

python - genfromtxt dtype=None 未获取二维数组

java - 有没有一种有效的方法来 "crop"一个文件(从尾部删除 x 个字节)?

c - C中如何进行就地计算

java - GWT I18N - 显示列表中的字符串

java - 在 Hibernate 中获取 Composite Id 为 null

java - 我如何访问内部类?

c# - 执行File.Delete后,文件仍处于DELETE PENDING

python - 为什么 shell=True 将命令连接在一起时可以工作?