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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李东梁 中级黑马   /  2014-3-26 07:52  /  970 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李东梁 于 2014-3-26 19:48 编辑
  1. /**
  2.          * 将缓存的文件导到道指定的文件夹中
  3.          *
  4.          * @param list
  5.          * @param file
  6.          * @throws IOException
  7.          */
  8.         public static void writerToFile(List<File> list, File file) throws IOException {
  9.                 BufferedWriter bufw = null;
  10.                 try {
  11.                         bufw = new BufferedWriter(new FileWriter(file));
  12.                         for (File f : list) {
  13.                                 bufw.write(f.getAbsolutePath());
  14.                                 bufw.newLine();
  15.                                 bufw.flush(); //加flush和不加有什么区别?
  16.                         }
  17.                 } catch (Exception e) {
  18.                         e.printStackTrace();
  19.                 } finally {
  20.                         if(bufw!=null){
  21.                                 try {
  22.                                         bufw.close();        
  23.                                 } catch (IOException e2) {
  24.                                         // TODO: handle exception
  25.                                         throw new RuntimeException("关闭失败");
  26.                                 }
  27.                         }
  28.                 }

  29.         }
复制代码

我试了,如果不加flush也能把文件写到指定的文件内,为什么还要加上呢,这样不是降低了效率吗?加上有什么好处?

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

3 个回复

正序浏览
龙健 发表于 2014-3-26 10:18
这里不加flush的确也能写到指定的文件中去,给我们的假象是好像flush要不要都可以一样,flush是将缓冲区清 ...

回答的挺好
回复 使用道具 举报
这里不加flush的确也能写到指定的文件中去,给我们的假象是好像flush要不要都可以一样,flush是将缓冲区清空,并将缓冲区里面的内容写到目的文件,这里是读取一行就写入一行,如果不加缓冲区,则要等到关闭流的时候才能一次性将数据写入文件,因为close的原理是先刷新流,再关闭流,可能描述的不怎么清楚,那我就给出一个比较直观的例子,希望能帮到你,列子如下:
  1.   import java.io.*;
  2.       public class Demo1 {


  3.               public static void main(String[] args) throws IOException {

  4.               /*
  5.                *
  6.                */
  7.               
  8.               //读取键盘。
  9.               BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  10.        BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(System.out));
  11.               //将目的从文件转移到控制台
  12.               String line = null;
  13.               while((line=bufr.readLine())!=null){
  14.                       bufw.write(line.toUpperCase());
  15.                      bufw.newLine();
  16.                      bufw.flush();
  17.                     //运行两次,一次注释bufw.flush(),一次不注释,一目了然。
  18.                       if("over".equals(line)){
  19.                               break;
  20.                       }
  21.               }
  22.               
  23.               bufw.close();
  24.               bufr.close();



  25. }
  26.       }




复制代码
回复 使用道具 举报
flush是清空缓冲区,就是说立即输出到输出目的地,而不是等缓冲区满了再输出,write只是将数据输出到缓冲区,还没有输出到目的地。
flash是为了减少缓冲区堆积过多数据造成溢出
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马