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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王建旺 初级黑马   /  2013-3-28 13:10  /  1558 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王建旺 于 2013-3-28 14:22 编辑

import java.io.*;

class  BufferedWriterDemo
{
        public static void main(String[] args)
        {
                FileWriter fw = null;
                BufferedWriter bufw = null;
                try
                {
                        fw = new FileWriter("demo.txt");
                        bufw = new BufferedWriter(fw);

                        bufw.write("dhhghd");
                        bufw.flush();
                }
                catch (IOException e)
                {
                        throw new RuntimeException("读写失败");
                }
                finally
                {
                        try
                        {
                                if(bufw!=null)
                                        bufw.close();
                        }
                        catch (IOException e)
                        {
                                throw new RuntimeException("写入关闭失败");
                        }
                }
        }
}
这里面的bufw.flush()可以不写吗,或者是要write多次的时候,是不是也可以不用写,数据也会写入到demo.txt中






















评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

5 个回复

倒序浏览
在字符流中:bufw.write()只是将数据写入到了缓冲区中,必须要bufw.flush()刷新缓冲区,不然数据写入不到指定的文件中。字符流在写入数据时底层还是会调用字节流,然后才能将数据写入文件中,但是字节流是不能直接操作字符的。
对于字节流:因为字节流操作的数据是字节表现形式的,所以在使用带缓冲区的BufferedOutputStream对象时,可以不刷新,但是刷新也可以,同样会把数据写入到指定文件中。

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

回复 使用道具 举报
yufeng47 发表于 2013-3-28 13:27
在字符流中:bufw.write()只是将数据写入到了缓冲区中,必须要bufw.flush()刷新缓冲区,不然数据写入不到指 ...

那个close不是也有刷新的功能吗,当我把全部数据写入到缓冲区时,最后用close进行刷新不是也可以吗
回复 使用道具 举报
王建旺 发表于 2013-3-28 13:32
那个close不是也有刷新的功能吗,当我把全部数据写入到缓冲区时,最后用close进行刷新不是也可以吗 ...

缓冲区中你每写入一行数控,就会把前一行你写入的数据覆盖掉,必须在循环体中刷新,若你用close,只能刷新最后一条语句。若仅仅录入一行数据,不用flush也行,不存在覆盖,但是还是建议你使用flush,按照java编码规范来,养成一个良好的习惯。
回复 使用道具 举报
在实际开发项目,不会是bufw.write("dhhghd");  写6个字符的, 可以是处理亿万次数据的,如果不bufw.flush(); 势必会影响系统性能。建议使用flush,按照java编码规范来,养成一个良好的习惯。

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

回复 使用道具 举报
yufeng47 发表于 2013-3-28 13:46
缓冲区中你每写入一行数控,就会把前一行你写入的数据覆盖掉,必须在循环体中刷新,若你用close,只能刷 ...

明白了,thank you
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马