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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐帅 中级黑马   /  2012-5-31 09:33  /  2901 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

已经在关闭资源的时候作出了空指针的判断,为何在读文件产生错误的时候
除了 File read error !还有 nullpointerException ?请帮忙看看,谢谢了啊

import java.io.*;

class FileReaderDemo2
{
        public static void main(String[] args)
        {
                FileReader fr = null;
                char buf[] = new char[1024];
                int num = 0;

                try
                {
                        fr = new FileReader("love.txt");
                        while ((num = fr.read(buf))!= -1)
                        {
                           System.out.println(new String(buf,0,num));
                        }
                       
                }

                catch (IOException e)
                {
                        System.out.println("File read error !");
                }

                finally
                {
                        try
                        {
                                if(fr!= null);
                                fr.close();
                        }
                        catch (IOException e)
                        {
                                System.out.println("File close error !");
                        }
                       
                }
               
        }
}


评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

9 个回复

倒序浏览

回帖奖励 +3

刚调试了下你的代码错误在这里:
1、在你的文件所在目录下没有love.txt文件,所以找不到文件,找不到文件怎么会读呢?所以会报出File read error !
2、在你的Finally里面,try
                        {
                                if(fr!= null);               //注意——你的if后面加了个分号 这样的意思就不是如果fr不为空则关闭fr了。
                                fr.close();
                        }

详细代码应该改为这样:
import java.io.*;

class FileReaderDemo2
{
        public static void main(String[] args)
        {
                FileReader fr = null;
                char buf[] = new char[1024];
                int num = 0;

                try
                {
                        fr = new FileReader("love.txt");
                        while ((num = fr.read(buf))!= -1)
                        {
                           System.out.println(new String(buf,0,num));
                        }
                        
                }

                catch (IOException e)
                {
                        System.out.println("File read error !");
                }

                finally
                {
                       
                        try
                        {
                                if(fr!= null)
                                fr.close();
                        }
                        catch (IOException e)
                        {
                                System.out.println("File close error !");
                        }
                        
                }
               
        }
}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
你的代码我运行过了,没问题,是不是 fr = new FileReader("G:\\c.txt");中的路径错了呢?你自己检查一下哈,我估计是路径错了,报空指针异常
回复 使用道具 举报
你的代码我运行过了,没问题,是不是 fr = new FileReader("G:\\c.txt");中的路径错了呢?你自己检查一下哈,我估计是路径错了,报空指针异常
回复 使用道具 举报
运行了下就时文件路径不正确或者不存在造成的
回复 使用道具 举报
楼主的判断语句  if(fr!= null);  有了分号就会任务if语句后的语句块为空,这个判断功能就不起作用了,后面的fr.close()语句不论fr为不为空都会执。因为没有找到文件fr引用就是空引用,因而就会产生NullPointerException这样的异常。楼主修改一下代码就可以了
  1.   finally
  2.                 {
  3.                         
  4.                         try
  5.                         {
  6.                                 if(fr!= null)
  7.                                 fr.close();
  8.                         }
  9.                         catch (IOException e)
  10.                         {
  11.                                 System.out.println("File close error !");
  12.                         }
  13.                         
  14.                 }
复制代码
楼主也可以把异常修改一下,将错就错的修改,呵呵。
  1. finally
  2.                {
  3.                        try
  4.                        {
  5.                                if(fr!= null);
  6.                                fr.close();
  7.                        }
  8.                        catch (Exception e)
  9.                        {
  10.                                System.out.println("File close error !");
  11.                        }
  12.                        
  13.                }
复制代码
希望对楼主有帮助

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
徐帅 中级黑马 2012-5-31 12:02:26
7#
刘伯阳 发表于 2012-5-31 09:45
刚调试了下你的代码错误在这里:
1、在你的文件所在目录下没有love.txt文件,所以找不到文件,找不到文件怎 ...

是自己的粗心,谢谢纠错

点评

没事 正常 有时候越小的地方反而越容易忽视。  发表于 2012-5-31 12:03
回复 使用道具 举报
徐帅 中级黑马 2012-5-31 12:03:12
8#
heima_dinghua 发表于 2012-5-31 10:00
原因在于 if(fr!= null);语句加了分号,导致fr.close();语句无论在什么情况下都会执行,而不是根据if判断的 ...

是自己粗心,谢谢提醒啊
回复 使用道具 举报
徐帅 中级黑马 2012-5-31 12:03:45
9#
凡延海 发表于 2012-5-31 10:39
楼主的判断语句  if(fr!= null);  有了分号就会任务if语句后的语句块为空,这个判断功能就不起作用了,后面 ...

解答的很详细。很是感谢!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马