A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© forDream 高级黑马   /  2014-3-25 22:00  /  1129 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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)                会报空指针异常  为什么啊
                 */                                        }
}

评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

3 个回复

正序浏览
chen_x 发表于 2014-3-25 23:39
判断一个文件对象是否是文件或目录时,必须先用File类的exist()函数判断该文件对象封装的内容是否存在,否 ...

有                                                                                        用
回复 使用道具 举报
判断一个文件对象是否是文件或目录时,必须先用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("没有此文件!");
                }
               
        }

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 郭黎明 于 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);            
                }


评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马