黑马程序员技术交流社区

标题: 关于BufferedWrite 写文件无法写入问题 [打印本页]

作者: 徐慧书    时间: 2012-4-27 19:20
标题: 关于BufferedWrite 写文件无法写入问题
当我们读取文件可以使用 BufferedReader br = new BufferedReader(new FileReader(fileName));然后br.readLine() 循环遍历即可读入文件
而使用BufferedWriter bw = new BufferedWriter(new FileWriter(fileName))  ; 然后调用bw.write("待写如字符串");却无法写入对应的文件
谁能说说用BufferedWriter写文件的关键及需要注意的问题么?
作者: 周四川    时间: 2012-4-27 20:49
bw.write("待写入字符串");之后加上:
bw.flush();
bw.close();
加了缓冲技术,写不进去可能是没有flush(刷新缓冲区)。

作者: chenwei    时间: 2012-4-27 20:59
写完数据后一定要刷新缓冲区flush()或者关闭流close()(自动刷新了)
否则数据还是存在缓冲区中并没有真正写到文件中
作者: prospect    时间: 2012-4-27 21:01
bw.write("待写如字符串");这句话只是把内容暂时性的写入一个缓存中,写完这一句后,一定要在后面加上bw.flush();或者bw.close(); bw.close();表示关闭缓存,它附带有一个方法就是把缓存中的内存写到指定的目标去。
作者: 刘少伟    时间: 2012-4-27 21:19
wirte只是将对象写入了流中,并没有直接写到文件,需要刷新一下(flush())。
关于BufferedWriter,自己的理解:BufferedWriter封装的字节数组应该为8K(eclipse里调试看到的),它操作的对象只是字符或者字符串、字符串数组等文本类的,直接用FileWriter或者Writer等等时效率很低,所以尽量用它来包装前面那些,这样可以高效输出。还有就是它的newLine方法,可以根据平台的不同采用不同的行分隔符,比如windows就用'\r''\n'表示回车换行,Linux就用'\n'表示,(java的跨平台性体现)。这样一来,我们将来输出时,不用为了某些格式而去刻意在文本后面加上'\r''\n',只要调用newLine方法即可(这样写的程序可以不受平台的限制,运行出一样的效果)。当然还有就是所有输出流共有的flush和close了。
作者: 光sail    时间: 2012-4-27 21:24
没使用刷新flush()方法,或者关闭close()方法
作者: 徐慧书    时间: 2012-4-28 09:32
周四川 发表于 2012-4-27 20:49
bw.write("待写入字符串");之后加上:
bw.flush();
bw.close();

有加 flush()的,可是没用噢
作者: 邵中国    时间: 2012-4-28 16:26
本帖最后由 邵中国 于 2012-4-28 16:34 编辑

BufferedWriter主要就是包装FileWriter这些类,让效率高点,
主要注意newLine(),目的就是让读取和输出的格式一样,否则
大小很可能不同;然后是刷新,jdk中既然有,就需要写完后刷
新一下




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2