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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 学习代码 中级黑马   /  2014-3-30 15:03  /  1192 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.io.*;
  2. class Demo3
  3. {
  4.         public static void main(String[] args) //throws IOException
  5.    {        BufferedReader ber= null;
  6.                 BufferedWriter bfr = null;
  7.                
  8.                 try
  9.                 {                                        //这个地方没太明白?为什么不在外面也定义一下FileReader和FileWriter呢?
  10.                                                         //如果传的文件不存在呢?大侠指教一下 ,
  11.                         ber = new BufferedReader(new FileReader("demo1.java"));
  12.                         bfr = new BufferedWriter(new FileWriter("demo1_copy.java"));
  13.                         while(true)
  14.                         {
  15.                                 String s = ber.readLine();
  16.                                 if(s==null)
  17.                                         break;
  18.                                 else

  19.                                 bfr.write(s);
  20.                                 bfr.newLine();
  21.                                 bfr.flush();
  22.                         }

  23.                 }
  24.                 catch (Exception e)
  25.                 {
  26.                         throw new RuntimeException("数据异常");
  27.                 }
  28.                 finally
  29.            {
  30.                         try
  31.                         {
  32.                                 if(ber== null)
  33.                                         ber.close();

  34.                         }
  35.                         catch (Exception e)
  36.                         {
  37.                                 throw new RuntimeException("读出数据异常");
  38.                         }
  39.                         try
  40.                         {
  41.                                 if(bfr== null)
  42.                                         bfr.close();

  43.                         }
  44.                         catch (Exception e)
  45.                         {
  46.                                 throw new RuntimeException("写入数据异常");
  47.                         }
  48.                
  49.                 }
  50.                        
  51.         }
  52. }
复制代码

谢谢

3 个回复

正序浏览
变量作用域的问题,定义外边finally,关流时不就找不到那个对象了。
回复 使用道具 举报
  1. try
  2.                 {                                        //这个地方没太明白?为什么不在外面也定义一下FileReader和FileWriter呢?
  3.                                                         //如果传的文件不存在呢?大侠指教一下 ,
  4.                         ber = new BufferedReader(new FileReader("demo1.java"));
  5.                         bfr = new BufferedWriter(new FileWriter("demo1_copy.java"));
  6.                         while(true)
  7.                         {
  8.                                 String s = ber.readLine();
  9.                                 if(s==null)
  10.                                         break;
  11.                                 else

  12.                                 bfr.write(s);
  13.                                 bfr.newLine();
  14.                                 bfr.flush();
  15.                         }

  16.                 }
复制代码

这里的缓冲区的变量,是需要释放资源的。
而FileReader和FileWriter 作为他们的参数传入。就是作为局部变量,用完了就释放了资源。
本身缓冲区(BufferedReader,BufferedWriter) 实例化对象,传值,是要抛出异常的。
在这里可以try 也可以抛给JVM。当然不建议抛给JVM。
还有就是如果FileReader对象加载的文件找不到,或不存在,就要在跳到catch中,执行相应的catch块的代码。
你这里用了Exception 处理的异常。。所以无论try中的那个部分有运行异常。他都会执行catch块中的代码,
也就是throw new RuntimeException("读出数据异常");
回复 使用道具 举报
这就是 局部变量 , 局部变量的作用范围只在一个大括号内
所以必须在try的大括号外面,后面的才可以调用这个变量啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马