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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陌路行者 中级黑马   /  2013-7-8 12:12  /  1390 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陌路行者 于 2013-7-8 12:36 编辑
  1. import java.io.*;
  2. class  CopyText
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 FileReader fr = null;
  7.                 FileWriter fw = null;
  8.                 try
  9.                 {
  10.                         fr = new FileReader("RuntimeDemo.java");
  11.                         fw = new FileWriter("Runtime_copy.txt");
  12.                         char[] buf = new char[1024];
  13.                         int num = 0;
  14.                         while((num=fr.read(buf))!=-1)
  15.                         {
  16.                                 //fr.read(buf);
  17.                                 fw.write(buf,0,num);
  18.                                 fw.flush();
  19.                         }
  20.                 }
  21.                 catch (IOException e)
  22.                 {
  23.                 }
  24.                 finally
  25.                 {
  26.                         try
  27.                         {
  28.                                         fr.close();
  29.                         }
  30.                         catch (IOException e)
  31.                         {
  32.                         }
  33.                         try
  34.                         {
  35.                                         fw.close();
  36.                         }
  37.                         catch (IOException e)
  38.                         {
  39.                         }
  40.                         
  41.                 }
  42.                         
  43.         }
  44. }
复制代码
为什么会报空指针异常

5 个回复

倒序浏览
你的代码有点小问题,你要判断下流是否为空,不为空在关。
代码如下:
import java.io.*;
class CopyText
{
        public static void main(String [] args)
        {
                FileReader fr=null;
                FileWriter fw=null;
                try
                {
                        fr=new FileReader("RuntimeDemo.java");
                        fw=new FileWriter("d:\\Runtime_copy.txt");
                        char [] buf=new char[1024];
                        int num=0;
                        while((num=fr.read(buf))!=-1)
                        {
                                // fr.read(buf);
                                fw.write(buf,0,num);
                                fw.flush();
                        }
                }
                catch(IOException e)
                {
                        System.out.println("复制失败"+e.toString());
                }
                finally
                {
                        if(fr!=null)
                        {
                                try
                                {
                                        fr.close();
                                }
                                catch(IOException e)
                                {
                                        System.out.println("读取流关闭失败"+e.toString());
                                }
                        }
                        if(fw!=null)
                        {
                                try
                                {
                                        fw.close();
                                }
                                catch(IOException e)
                                {
                                        System.out.println("写入流关闭失败"+e.toString());
                                }
                        }

                }

        }
}
回复 使用道具 举报
oh  my god!又大意了,谢啦!  问题已然解决
回复 使用道具 举报
当前路径下没有RuntimeDemo.java文件,读取FileReader没有关联到源文件,则fr和fw都为null,不判断关流会报空指针异常。
如果能确保当前路径下有源文件,可不进行判断,因为一定会关联。不过最好管资源语句进行下判断,以防出现空指针。
回复 使用道具 举报 1 0
你在读取时事这个RuntimeDemo.java文件,后面你有一个关闭流的命令fr.close();,其中就是在处理fr = new FileReader("RuntimeDemo.java"),这时如果你的路径下没有这个文件,这个关闭命令就使错误了,你没有东西,你关闭不就是空指针异常,以后你可以抛这个异常,也可以在最开始判断是否存在这个文件。
回复 使用道具 举报
很好 很强大
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马