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

请大神看一下这方法的代码就行了,传入的参数没问题,就看这段代码privatestaticvoidsearch(Filef){File[]ff=f.listFiles();... 请大神看一下这方法的代码就行了,传入的参数没问题,就看这段代码
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 · 百度知道合伙人官方认证企业
尚学堂科技有限公司
北京尚学堂科技有限公司是一家从事JAVA、大数据、web前端、网络在线教育、互联网架构师、Android、ios技术开发、咨询为一体的软件公司。公司由海外留学人员和国内IT人士创建。
向TA提问
展开全部

没毛病!!!


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:\\我就会报异常,请你试试看
追答

关于目录分隔符,例如:C:\Program Files\Java,在windows下都是单\而不是双\

同时,由于电脑系统不同,默认使用的目录分隔符也不同,window系统使用反斜杠\

Linux系统使用的是正斜杠/,为了规范,最好使用File类中的属性----File.separator

在AIP定义如下:

它的含义就是,根据不同的操作系统来代替不同的目录分隔符,达到代码跨平台而不报错误/异常的目的!

紫薇参星
科技发烧友

2017-01-10 · 有一些普通的科技小锦囊
知道大有可为答主
回答量:5983
采纳率:92%
帮助的人:3589万
展开全部

你的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函数的代码告诉我,否则我只能猜测哪里出的问题.
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式