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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周昭民 中级黑马   /  2014-2-13 15:42  /  1814 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.io.*;
  2. class BufferedWriterDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 //声明一个写入流
  7.                 Writer wt=null;
  8.                 //声明一个缓冲区
  9.                 BufferedWriter bfwt=null;
  10.                 try
  11.                 {
  12.                         //创建字符写入流对象
  13.                         wt=new FileWriter("haha.txt");
  14.                         //只要将需要被提高效率的流对象作为参数传递给缓冲区的构造函数集合
  15.                         bfwt=new BufferedWriter(wt);
  16.                         /*
  17.                         BufferedWriter(Writer out)
  18.                      创建一个使用默认大小输出缓冲区的缓冲字符输出流。
  19.                         */

  20.                        
  21.                         bfwt.write("heheehe,haolenga");
  22.                         //写入一个换行符
  23.                         bfwt.newLine();
  24.                        
  25.                         /*
  26.                         void newLine()
  27.                        写入一个行分隔符。
  28.                         */


  29.                         //记住。这时只要刷新缓冲区即可
  30.                         bfwt.flush();
  31.                        
  32.                         bfwt.write("呵呵呵,好冷啊");

  33.                         bfwt.flush();
  34.                 }
  35.                 catch (IOException e)
  36.                 {
  37.                         System.out.println(e.toString());
  38.                 }
  39.                 finally{
  40.                         try
  41.                         {
  42.                                 if(bfwt!=null)
  43.                                         bfwt.close();//其实关闭缓冲区,就是在关闭缓冲区中的流对象
  44.                         }
  45.                         catch (IOException e)
  46.                         {
  47.                                 System.out.println(e.toString());
  48.                         }
  49.                        
  50.                 }
  51.                
  52.         }
  53. }
复制代码
毕老师说只要把缓冲区关闭,就是在关闭缓冲区中流的对象,这点我是理解的。但是我突然想到一个问题,当我创建一个Writer流后,我在创建缓冲区的时候不小心把参数写错了,比如一个字母。这时抛出了异常。
而finally代码块执行,但我并没有成功创建缓冲区,因为没有缓冲区对象,所以不用关闭缓冲区。可是我的Writer流还没关闭资源呢。
这样说的话,我用不用再finally代码块里多加一个关闭Writer流的方法?

求解,我这样分析是对的还是错的

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

4 个回复

倒序浏览
这个简单你可以再finally代码开中直接关闭Writer流,因为缓冲区和这个Writer流是关联着的 你只要关闭了Writer流就可以了吧应该,本人愚见 哈哈

点评

额,这个我想过。但我不知道这样子是对不对的  发表于 2014-2-13 17:47
回复 使用道具 举报
你写错参数 编译好像无法通过 你试一下
回复 使用道具 举报
自由自在2014 发表于 2014-2-13 17:03
你写错参数 编译好像无法通过 你试一下

不会啊,我复制了再去编译也没错。你没导包还是没改类名吧?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马