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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 15001162522 中级黑马   /  2015-10-6 23:21  /  717 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Demo{
  2.         public static void main(String[] args){
  3.                 FileReader fr = null;
  4.                 FileWriter fw = null;
  5.                 try
  6.                 {
  7.                         fr =new FileReader("c:\\abc.txt");
  8.                         fw =new FileWriter("e:\\hehe.txt");
  9.                         char[] buf = new char[1024];//用于暂存字符
  10.                        
  11.                         //读取一组字符放到数组,并传递给书写流对象,如此循环直至文件被读取完毕
  12.                         while((fr.read(buf))!=-1){
  13.                                 fw.write(buf,0,fr.read(buf));
  14.                                 fw.flush();
  15.                         }
  16.                 }
  17.                 catch(Exception e)//捕获并处理异常
  18.                 {
  19.                         System.out.println(e.toString());
  20.                 }
  21.                 finally    //关闭流资源
  22.                 {
  23.                         try
  24.                         {
  25.                                 if(fr!=null)
  26.                                         fr.close();
  27.                                 if(fw!=null)
  28.                                         fw.close();
  29.                         }
  30.                         catch(Exception e)
  31.                         {
  32.                                 System.out.println(e.toString());
  33.                         }
  34.                 }
  35.         }

  36. }
复制代码


运行提示我角标越界异常 吗,why??????

6 个回复

倒序浏览
我反应过来了 ~~~~~~~已想明白~~~~~
回复 使用道具 举报
try
                        {
                                if(fr!=null)
                                        fr.close();
                                if(fw!=null)
                                        fw.close();
                        }
                        catch(Exception e)
                        {
                                System.out.println(e.toString());
                        }

提醒楼主这里最好写两个try, 因为如果第一个close如果出异常后,第二个close就跑不到
回复 使用道具 举报
15001162522 发表于 2015-10-6 23:33
我反应过来了 ~~~~~~~已想明白~~~~~

到底是为啥啊?
回复 使用道具 举报
拂袖叙五代 发表于 2015-10-7 00:48
try
                        {
                                if(fr!=null)

哦哦  太对了   多谢提醒
回复 使用道具 举报
  1. while((fr.read(buf))!=-1){
  2.                                 fw.write(buf,0,fr.read(buf));
  3.                                 fw.flush();
复制代码


问题出在这部分,应该定义一个int len =fr.read(buf) ;后面的fw.write(buf,0,read(buf))应写为fw.write(buf,0,len)。。。。
不过不定义len,相当于又调用了一次read(buf)方法,懂了吗?
回复 使用道具 举报
15001162522 发表于 2015-10-7 11:34
问题出在这部分,应该定义一个int len =fr.read(buf) ;后面的fw.write(buf,0,read(buf))应写为fw.write ...

哦,懂了懂了。。。在一个循环内调用了两次
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马