Java 当我在这个程序中将一个文件数组作为方法参数时,为什么会显示NullPointerException?

Java 当我在这个程序中将一个文件数组作为方法参数时,为什么会显示NullPointerException?,java,io,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(Test

我正在学习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;
            }
        }
    }
}
包文件;
导入java.io.File;
导入java.io.IOException;
公共类测试文件{
静态双MaxSize=0;
静态双最小值=双最大值;
静态文件MaxFile=null;
静态文件MinFile=null;
公共静态void main(字符串[]args)引发IOException{
文件f=新文件(“C:\\Windows”);
File[]fs=f.listFiles();
//System.out.println(fs[10]);
//如果(真)
//返回;
比较文件(fs);
System.out.printf(“maxi文件为%s,大小为%,d字节”,MaxFile.getAbsolutePath(),MaxSize);
System.out.printf(“小文件是%s,大小是%,d字节”,MinFile.getAbsolutePath(),MinSize);
}
公共静态无效比较文件(文件[]文件){
用于(文件x:文件){
if(x.isDirectory())
compareFile(x.listFiles());
如果(最大尺寸x.length()&&x.length()!=0){
MinSize=x.长度();
MinFile=x;
}
}
}
}
我感到困惑的是,当我添加3行调试代码(在这里注释)时,
fs
不是空指针。它可以得到
文件
元素

的答案,并且在许多情况下会在您的career中找到答案

它解释了您调用的方法可以返回null,在这种情况下。剩下的就看你了

答案是肯定的,而且在很多情况下,它会出现在你的事业中


它解释了您调用的方法可以返回null,在这种情况下。剩下的就看你了

错误不在main中,而是在方法比较文件中。当您递归地调用它时,最终您可能会发现自己在一个没有文件的文件夹中。在这种情况下,您需要调用compareFile()和x.listFiles()作为参数,在这种情况下,该参数将为null


为了修复错误,只需检查文件==null并在compareFile方法的开始处返回。

错误不在main中,而是在方法compareFile中。当您递归地调用它时,最终您可能会发现自己在一个没有文件的文件夹中。在这种情况下,您需要调用compareFile()和x.listFiles()作为参数,在这种情况下,该参数将为null


为了修复错误,只需检查文件==null并在compareFile方法的开头返回。

错误抛出在哪里?错误抛出在哪里?非常感谢!非常感谢你!