黑马程序员技术交流社区

标题: 关于递归和io流File对象报空指针的问题 [打印本页]

作者: forDream    时间: 2014-3-25 22:00
标题: 关于递归和io流File对象报空指针的问题
  1. public class ShowFileName {
  2.         public static void main(String[] args) {
  3.                
  4.                 File file = new File("e:\\aaa");
  5.                 showMyFileName(file);
  6.         }

  7.         private static void showMyFileName(File file) {
  8. //                定义文件数组
  9.                 File[] files;
  10. <font color="#ff0000">//                判断是否是文件
  11. <b><u>                if(file.isFile()){
  12. //                        判断文件类型    //
  13. 这样没有问题
  14.                         if(file.getName().endsWith(".txt"))</u></b>
  15. //                                打印绝对路径和文件名
  16.                         System.out.println(file.getAbsolutePath()+"::::::::::::"+file.getName());
  17.                 }</font> else {
  18. //                        获取文件数组
  19.                         files = file.listFiles();
  20. //                        遍历数组
  21.                         for (int i = 0; i < files.length; i++) {
  22. //                                递归调用
  23.                                 showMyFileName(files[i]);
  24.                         }
  25.                        
  26.                 }
  27.                
  28.                
  29.         }

  30. }
复制代码

        private static void showMyFileName(File file) {//                定义文件数组                File[] files;//                判断是否是文件 //                        判断文件类型                if(file.isFile()&&file.getName().endsWith(".txt")){//换成这样的话就会报异常        //                                打印绝对路径和文件名                        System.out.println(file.getAbsolutePath()+"::::::::::::"+file.getName());                } else {//                        获取文件数组                        files = file.listFiles();//                        遍历数组                        for (int i = 0; i < files.length; i++) {//                                递归调用                                showMyFileName(files);                        }                                        }                                /*                * Exception in thread "main" java.lang.NullPointerException                        at com.itcast_03.ShowFileName.showMyFileName(ShowFileName.java:27)                        at com.itcast_03.ShowFileName.showMyFileName(ShowFileName.java:29)                        at com.itcast_03.ShowFileName.main(ShowFileName.java:12)                会报空指针异常  为什么啊
                 */                                        }
}


作者: 郭黎明    时间: 2014-3-25 23:18
本帖最后由 郭黎明 于 2014-3-25 23:20 编辑

你的代码看上去好乱,首先先要得到集合,然后遍历集合,接着再判断,我写了一个,你应该能看懂public static void showMyFileName(File file) {
                File [] files = file.listFiles();
                for(File f :files ){  
                        if(f.isFile()&&f.getName().endsWith(".txt"))
                                System.out.println(f.getName()+"-------"+f.getAbsolutePath());
                        if(f.isDirectory())   
                                showMyFileName(f);            
                }



作者: chen_x    时间: 2014-3-25 23:39
判断一个文件对象是否是文件或目录时,必须先用File类的exist()函数判断该文件对象封装的内容是否存在,否则很可能会有问题;
比如file.exist()为false时,那file.isFile()和file.isDirectory()都是返回false的,这样奇怪的现象出现了也不好排查,所以必须先判断file.exist()返回值。

代码中,如果机子上没有e:\\aaa这个目录,那调用showMyFileName函数时,if(file.isFile())条件为假,从而执行else语句,而else语句中files = file.listFiles();得到的files是为null的,所以后面再取files数组的长度和元素时就报空指针异常了。

main函数可以改一下:
        public static void main(String[] args) {
               
                File file = new File("e:\\aba");
                System.out.println(file.getName());
                if(file.exists()){
                        showMyFileName(file);             
                }else{
                        System.out.println("没有此文件!");
                }
               
        }
作者: 霍振鹏    时间: 2014-3-26 13:04
chen_x 发表于 2014-3-25 23:39
判断一个文件对象是否是文件或目录时,必须先用File类的exist()函数判断该文件对象封装的内容是否存在,否 ...

有                                                                                        用




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2