java代码问题 请大神看看我写的这段代码有什么问题,为什么会报空指针异常
private static void search(File f) {
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);
}
}
} 展开
2017-01-10 · 百度知道合伙人官方认证企业
没毛病!!!
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)
我也纳闷,检查了好几遍都不知道哪错了,反复试了几次,有的路径会异常,有的不会,比如你输入C:\\我就会报异常,请你试试看
你的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
第一次调用这个方法的时候,传的就是目录文件,你就看一下方法代码哪里有问题
if(file.isDirectory()) {
search(file);
} else if(file.isFile() && file.getName().endsWith(".java")) {
System.out.println(file);
}
这段代码,明明判断的是当是目录时就递归调用啊,为什么还出现空指针异常呢
还有一种可能,你传给函数search的目录有问题,比如在主函数main中这样调用search函数
search(new File("D:\\tmp\temp\tmp"));因为在java中目录文件的分割符"\"需要转义,所以正确的调用方法是search(new File("D:\\tmp\\temp\\tmp"));或者search(new File("D:/tmp/temp/tmp")); 你最好把调用的search函数的代码告诉我,否则我只能猜测哪里出的问题.