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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邝雄伟 中级黑马   /  2013-2-2 15:30  /  1543 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;

public class IOTest {

        public static void main(String[] args) throws Exception {
                   FileOutputStream fos = new FileOutputStream("d:\\test.txt");
                   OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
                   BufferedWriter bw = new BufferedWriter(osw);
                   bw.write("java IO 流的关闭顺序测试");
                  
                  //这种关闭顺序会报异常: java.io.IOException: Stream closed                                 
                   fos.close();
                   osw.close();
                   bw.close();

                   //这种关闭顺序则不会报异常                                 
                   //bw.close();
                   //osw.close();
                   //fos.close();
                }
}

所有打开的IO流必须按照第二种方式依次关闭吗?    为啥第一种会报 Stream closed 异常?

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

3 个回复

倒序浏览
嗯 - -
你直接只关闭最外层的就行了,bw.close();
关闭bw.close();的时候,它自己会一层层的关闭的。。。
还有看到有人发了Java1.7新特性,会自动关闭资源咯,到时候你就可以只开不用考虑关了。。。
但是我想,如果为了节约系统资源,手动关闭的话,释放资源应该会快一些。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
你得看他们三个之间的关系,如果不是按的他们的顺序的关闭的就会报异常
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马