java代码问题 请大神看看我写的这段代码有什么问题,为什么会报空指针异常

2024-10-30 01:00:58
有2个网友回答
网友(1):

没毛病!!!


public class Demo {
    private static void search(File f) {
        //1.获取文件数组
        File[] ff = f.listFiles();
        //2.通过for-each语句获取数组当中所有的文件
        for (File file : ff) {
            //2.1 判断是否是文件夹/目录,如果是使用递归再次判断
            if(file.isDirectory()) {
                search(file);
            //2.2 满足两个条件:其一是文件;其二是文件名称后缀以.java结束
            } else if(file.isFile() && file.getName().endsWith(".java")) {
                //输出
                System.out.println(file);
            }
        }
    }
    public static void main(String[] args) {
        //创建File文件,并指定文件路径
        File f = new File("D:"+File.separator+"203sxt");
        //创建Demo类类型,并调用search方法并传入实参
        Demo d = new Demo();
        d.search(f);
    }
}

最后结果也不是空指针异常(NullPointerException)

网友(2):

你的Javasearch函数程序,当传入的文件是普通文件而非目录文件时,就会出现空指针异常.

解决办法也很简单,就是在进入函数时先判断一下是目录文件还是普通文件,是普通.java文件则打印出来,这样就没事了.完整的Java程序如下

import java.io.File;
public class D {
 private static void search(File f) {
  if(f.isDirectory()) {
   File[] ff = f.listFiles();
   for (File file : ff) {
    if(file.isDirectory()) {
     search(file);
    } else if(file.isFile() && file.getName().endsWith(".java")) {
     System.out.println(file);
    }
   }
  }else if(f.isFile() && f.getName().endsWith(".java")){
   System.out.println(f);
  }
 } 
 public static void main(String[] args) {
  search(new File("D:\\tmp"));
 }
}

运行结果
D:\tmp\AAAA.java
D:\tmp\AWTTest.java
D:\tmp\D.java
D:\tmp\Maze.java
D:\tmp\Test13.java