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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡发友 中级黑马   /  2013-2-7 10:50  /  2163 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


注:将c盘的根目录封装成File对象后,在运行回报java.lang.NullPointerException
      但是如果把目录换成其他的(比如c:\\java),又正常,

    不解,请大家帮忙解决下;谢谢


class IOTest{
        public static void main(String [] args){

               
               
                File dir = new File("c:\\");
                List<File> list = new ArrayList<File>();
                fileoList(dir,list);
               
                File file = new File("c:\\a.txt");
                listToFile(list,file.toString());
        }

        public static void fileoList(File dir,List<File> list){
                File [] files = dir.listFiles();
                for(File file : files){
                        if(file.isDirectory())
                                fileoList(file,list);
                        else{
                                if(file.getName().endsWith(".java"))
                                        list.add(file);
                        }
                               

                }
        }
        public static void listToFile(List<File> list,String filePath){
                BufferedWriter bufw = null;
                       
                try{       
                        bufw = new BufferedWriter(new FileWriter(filePath));
                        for(File paths : list){
                                String path = paths.getAbsolutePath();
                                bufw.write(path);
                                bufw.flush();
                                bufw.newLine();
                        }
                }
                catch(IOException e){
                        throw new RuntimeException("读取数据失败");
                }
                finally{
                        try{
                                if(bufw != null)
                                        bufw.close();
                        }
                        catch(Exception e){
                                throw new RuntimeException("写入流关闭失败");
                        }
                }
               
        }
}

6 个回复

倒序浏览
你要创建的是文件,不是目录,所以一定要有创建的对象!在你的创建中并没有创建出的对象,也就是说你要创建的对象不存在,没有创建成功,所以就会出现空指针异常啦!

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 夏振博 于 2013-2-8 00:56 编辑
  1. import java.io.BufferedWriter;
  2. import java.io.File;
  3. import java.io.FileWriter;
  4. import java.io.IOException;
  5. import java.util.ArrayList;
  6. import java.util.List;

  7. public class Test {
  8.         public static void main(String[] args) {
  9.                 File dir = new File("D:\\");
  10.                 List<File> list = new ArrayList<File>();
  11.                 fileoList(dir, list);

  12.                 File file = new File("a.txt");
  13.                 listToFile(list, file.toString());
  14.         }

  15.         public static void fileoList(File dir, List<File> list) {
  16.                 File[] files = dir.listFiles();
  17.                 if (files != null) {//只加了这里,如果不判断会报空指针异常,直接盘符下有不允许访问的文件,当访问时会返回null
  18.                         for (File file : files) {
  19.                                 if (file.isDirectory())
  20.                                         fileoList(file, list);
  21.                                 else {
  22.                                         if (file.getName().endsWith(".java"))
  23.                                                 list.add(file);
  24.                                 }
  25.                         }
  26.                 }
  27.         }

  28.         public static void listToFile(List<File> list, String filePath) {
  29.                 BufferedWriter bufw = null;

  30.                 try {
  31.                         bufw = new BufferedWriter(new FileWriter(filePath));
  32.                         for (File paths : list) {
  33.                                 String path = paths.getAbsolutePath();
  34.                                 bufw.write(path);
  35.                                 bufw.flush();
  36.                                 bufw.newLine();
  37.                         }
  38.                 } catch (IOException e) {
  39.                         throw new RuntimeException("读取数据失败");
  40.                 } finally {
  41.                         try {
  42.                                 if (bufw != null)
  43.                                         bufw.close();
  44.                         } catch (Exception e) {
  45.                                 throw new RuntimeException("写入流关闭失败");
  46.                         }
  47.                 }

  48.         }
  49. }
  50. 想问下,难道在代码文字模式下无法改变字体颜色吗,???
复制代码
回复 使用道具 举报
可以就像html那样,你可以自定义一个css,然后在代码中引用这个css文件,如果你觉得要修改颜色或者字体之类的在css里面修改就可以了,JavaSE学习内容里面是没有的!这是JavaWeb的知识!
回复 使用道具 举报
李东城 来自手机 中级黑马 2013-2-8 02:33:03
报纸
如果你使用的是Win7系统,可能是系统权限的问题…来自: Android客户端
回复 使用道具 举报
黄成超 发表于 2013-2-7 22:10
你要创建的是文件,不是目录,所以一定要有创建的对象!在你的创建中并没有创建出的对象,也就是说你要创建 ...

抛出的异常显示是在fileToList这个方法中,所以还没到创建文件对象那一步,我打印了File数组里的数据,是可以打印的,只是在for循环遍历时,出现的空指针异常
回复 使用道具 举报
胡发友 发表于 2013-2-8 11:33
抛出的异常显示是在fileToList这个方法中,所以还没到创建文件对象那一步,我打印了File数组里的数据,是 ...

不好意思,原来没仔细看,这个是因为你遍历的目录存在无法访问的目录,你无法访问到,所以会出现这样的情况,你换一个文件,测试一下那些可以访问的目录,如一个自己创建的文件夹目录,一般就可以访问了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马