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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐慧书 中级黑马   /  2012-4-27 19:20  /  4931 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

当我们读取文件可以使用 BufferedReader br = new BufferedReader(new FileReader(fileName));然后br.readLine() 循环遍历即可读入文件
而使用BufferedWriter bw = new BufferedWriter(new FileWriter(fileName))  ; 然后调用bw.write("待写如字符串");却无法写入对应的文件
谁能说说用BufferedWriter写文件的关键及需要注意的问题么?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

8 个回复

倒序浏览
bw.write("待写入字符串");之后加上:
bw.flush();
bw.close();
加了缓冲技术,写不进去可能是没有flush(刷新缓冲区)。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
写完数据后一定要刷新缓冲区flush()或者关闭流close()(自动刷新了)
否则数据还是存在缓冲区中并没有真正写到文件中

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
bw.write("待写如字符串");这句话只是把内容暂时性的写入一个缓存中,写完这一句后,一定要在后面加上bw.flush();或者bw.close(); bw.close();表示关闭缓存,它附带有一个方法就是把缓存中的内存写到指定的目标去。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
wirte只是将对象写入了流中,并没有直接写到文件,需要刷新一下(flush())。
关于BufferedWriter,自己的理解:BufferedWriter封装的字节数组应该为8K(eclipse里调试看到的),它操作的对象只是字符或者字符串、字符串数组等文本类的,直接用FileWriter或者Writer等等时效率很低,所以尽量用它来包装前面那些,这样可以高效输出。还有就是它的newLine方法,可以根据平台的不同采用不同的行分隔符,比如windows就用'\r''\n'表示回车换行,Linux就用'\n'表示,(java的跨平台性体现)。这样一来,我们将来输出时,不用为了某些格式而去刻意在文本后面加上'\r''\n',只要调用newLine方法即可(这样写的程序可以不受平台的限制,运行出一样的效果)。当然还有就是所有输出流共有的flush和close了。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
没使用刷新flush()方法,或者关闭close()方法
回复 使用道具 举报
周四川 发表于 2012-4-27 20:49
bw.write("待写入字符串");之后加上:
bw.flush();
bw.close();

有加 flush()的,可是没用噢
回复 使用道具 举报
本帖最后由 邵中国 于 2012-4-28 16:34 编辑

BufferedWriter主要就是包装FileWriter这些类,让效率高点,
主要注意newLine(),目的就是让读取和输出的格式一样,否则
大小很可能不同;然后是刷新,jdk中既然有,就需要写完后刷
新一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马