若余相思 发表于 2018-3-5 10:05:27

空指针异常的错误,大伙帮我看看

代码如下

package cn.xiaohong;

import java.io.File;

public class DiGuiFile {

        public static void main(String[] args) {
                File srcFile = new File("E:/");
                searchFile(srcFile);
        }

        private static void searchFile(File srcFile) {
                if (srcFile.isFile()) {
                        if (srcFile.getAbsolutePath().endsWith(".jpg")) {
                                System.out.println(srcFile.getAbsolutePath());
                        }
                } else {
                        File[] files = srcFile.listFiles();
                        for (File f : files) {
                                searchFile(f);
                        }
                }
        }

}



报错如下:
Exception in thread "main" java.lang.NullPointerException
        at cn.xiaohong.DiGuiFile.searchFile(DiGuiFile.java:19)
        at cn.xiaohong.DiGuiFile.searchFile(DiGuiFile.java:20)
        at cn.xiaohong.DiGuiFile.searchFile(DiGuiFile.java:20)
        at cn.xiaohong.DiGuiFile.main(DiGuiFile.java:9)



我看不出哪里错了,大伙帮我看看

mariomm 发表于 2018-3-5 10:59:23

你这是什么语言的代码啊啊。。

若余相思 发表于 2018-3-5 12:55:55

mariomm 发表于 2018-3-5 10:59
你这是什么语言的代码啊啊。。

Java

achun 发表于 2018-3-5 15:56:46

你需要在
for (File f : files) {
      searchFile(f);
}
这段代码外面加一个为空判断
if(files != null){
   for (File f : files) {
      searchFile(f);
   }
}

若余相思 发表于 2018-3-5 18:41:05

achun 发表于 2018-3-5 15:56
你需要在
for (File f : files) {
      searchFile(f);


我试了下, 你的方法是可以的,非常厉害

我刚看了下,这个方法listFiles()返回的是文件和目录,如果目录为空,所以数组就是空的,所以是空指针异常是吗?但是我try...catch...貌似也是可以的

代码:
package cn.xiaohong;

import java.io.File;

public class DiGuiFile2 {

      public static void main(String[] args) {
                File srcFile = new File("E:/");
                searchFile(srcFile);
      }

      private static void searchFile(File srcFile) {
                if (srcFile.isFile()) {
                        if (srcFile.getAbsolutePath().endsWith(".jpg")) {
                              System.out.println(srcFile.getAbsolutePath());
                        }
                } else {
                        try{
                        File[] files = srcFile.listFiles();
                                for (File f : files) {
                              searchFile(f);
                                }
                        }catch (Exception e){
                               
                        }
                        
                }
      }

}

achun 发表于 2018-3-6 09:01:56

若余相思 发表于 2018-3-5 18:41
我试了下, 你的方法是可以的,非常厉害

我刚看了下,这个方法listFiles()返回的是文件和目录,如果目 ...

你加异常处理,那么后面的流程都结束了,要是1、E:/test1/test2/test3;2、E:/test1/test2/test4/test.txt;3、E:/test1/test2/test5;4、E:/test1/test2/test6/test.txt。假如是这种,如果你加trycatch,那么你在得到test3的时候就抛出了异常,那后面没有异常的test4、test6文件夹就不能处理了,所以最好的解决办法应该在外面加一个不为空的条件判断

若余相思 发表于 2018-3-6 11:16:20

achun 发表于 2018-3-6 09:01
你加异常处理,那么后面的流程都结束了,要是1、E:/test1/test2/test3;2、E:/test1/test2/test4/test.tx ...

有这种情况吗?你能举个例子给我看看吗?我没有做过开发,不是很能理解。

achun 发表于 2018-3-12 09:14:01

你就按我上面的方法建几个目录和文件就可以了,然后运行你的代码就可以看到效果,然后再 把代码改成我说的那样再运行一遍,你就可以看到效果
页: [1]
查看完整版本: 空指针异常的错误,大伙帮我看看