黑马程序员技术交流社区

标题: IO流问题 [打印本页]

作者: 陌路行者    时间: 2013-7-8 12:12
标题: IO流问题
本帖最后由 陌路行者 于 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. }
复制代码
为什么会报空指针异常

作者: 哪颗最亮的星星    时间: 2013-7-8 12:30
你的代码有点小问题,你要判断下流是否为空,不为空在关。
代码如下:
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());
                                }
                        }

                }

        }
}

作者: 陌路行者    时间: 2013-7-8 12:34
oh  my god!又大意了,谢啦!  问题已然解决
作者: 王磊    时间: 2013-7-8 12:40
当前路径下没有RuntimeDemo.java文件,读取FileReader没有关联到源文件,则fr和fw都为null,不判断关流会报空指针异常。
如果能确保当前路径下有源文件,可不进行判断,因为一定会关联。不过最好管资源语句进行下判断,以防出现空指针。
作者: lanbuohan    时间: 2013-7-8 14:31
你在读取时事这个RuntimeDemo.java文件,后面你有一个关闭流的命令fr.close();,其中就是在处理fr = new FileReader("RuntimeDemo.java"),这时如果你的路径下没有这个文件,这个关闭命令就使错误了,你没有东西,你关闭不就是空指针异常,以后你可以抛这个异常,也可以在最开始判断是否存在这个文件。
作者: judyfun    时间: 2013-8-20 12:02
很好 很强大




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