当前位置: 代码迷 >> Eclipse >> 关闭流的有关问题
  详细解决方案

关闭流的有关问题

热度:53   发布时间:2016-04-23 01:06:23.0
关闭流的问题
public static void main(String[] args) throws IOException {
/*
 * BufferedWriter写操作 
 */
     //实例化一个FileWriter对象
FileWriter fw=new FileWriter("C:/myDoc/hello.txt");
//实例化一个BufferWriter对象
BufferedWriter bw=new BufferedWriter(fw);
bw.write("大家好,我要修改内容了");
bw.write("我正在学习bufferedwriter");
bw.newLine();
bw.write("请多多指教!");
bw.newLine();
bw.flush();//刷新缓冲区

fw.close();//关闭流

书上面写的这个bw刷新之后为什么没有关闭流啊

------解决方案--------------------
我觉得有些流可能不需要关闭。
比如System.out,这个out也是流,我试用他后,就没关闭过。
------解决方案--------------------
http://blog.sina.com.cn/s/blog_6307d85b0100gqtt.html
------解决方案--------------------
刷新只是把缓冲区的东西刷新出去,比如缓存最大1024个字符,读了512个,刷新了,文件才有512个字符,不刷新,文件什么都没有,等缓存1024都不够了,自动刷新,close()方法里面会调用flush()
------解决方案--------------------
flush和close是两个不同的功能,flush为什么会关闭流呢?
flush只是用来清空缓冲区的,把信息及时发到流上, 跟关闭流一点关系都没有.
而close方法则会在关闭之前调用flush刷新后执行关闭.
------解决方案--------------------
BufferedWriter close()是需要的,最外层close(),里面套的可以不关,
书上完全写错了,代码不应该这样写,如果做示例入门就不追究了,还有jdk7.0后可以try(){}
public static void main(String[] args) {
        BufferedWriter bw = null;
        try {
            bw = new BufferedWriter(new FileWriter("file"));
        } catch (IOException e) {
            // 记录日志,是否抛异常由业务决定
        } finally {
            if (bw != null) { // 最外层关了,FileWriter不需要
                try {
                    bw.close();
                } catch (IOException e) {
                    // 记录日志
                }
            }
        }
        // jdk 1.7以后
        try (FileWriter f = new FileWriter("file"); BufferedWriter w = new BufferedWriter(f);) {
            // Writer implements Closeable,jdk会去调用close();
        } catch (IOException 
------解决方案--------------------
 RuntimeException e) { // 
------解决方案--------------------
 或者的意思
        }
    }
  相关解决方案