为什么我的只有
writer2writer2writer2writer2writer2

解决方案 »

  1.   

    你是不是这么声明的
    BufferedWriter writer1 = new BufferedWriter(new FileWriter(file));
    BufferedWriter writer2 = new BufferedWriter(writer1);这样的效果其实是一个writer在起作用
      

  2.   

    我是这样声明的:
    writer1 = new BufferedWriter
    (new OutputStreamWriter
    (new FileOutputStream("H:\\log_18.csv", true)));
    writer2 = new BufferedWriter
    (new OutputStreamWriter
    (new FileOutputStream("H:\\log_18.csv", true)));
    但是发现一个现象,如果声明超过2个,第3个开始生成的对象地址就全部和第2个相同了,但输出结果还是象我开始那样,按对象的先后输出。
      

  3.   

    BufferedWriter应该是在内存中写入内容的吧,
    它只有到 显示的调用flush()或close()或对象即将被垃圾回收器回收时 才将内容写入文件的.
    你可以这样试试:
    writer1.write("writer1");
    writer1.flush();
    writer2.write("writer2");
    writer2.flush();writer1.write("writer1");
    writer1.flush();
    writer2.write("writer2");
    writer2.flush();
      

  4.   

    楼上的说得不错,你生成一个BufferWriter的时候,
    首先是在内存中生成默认的缓冲区来准备存放你的东东,默认的大小好像是512k吧
    只有调用flush()或者buffer已经曼的时候才被写到目的地
      

  5.   

    谢谢楼上的提示:
    我想对于同一个文件,如果说生成多个BufferedWriter代表什么,下面是10个时的输出的对象ID:
    writer1:java.io.BufferedWriter@209f4e
    writer2:java.io.BufferedWriter@3ac748
    writer3:java.io.BufferedWriter@3ac748
    writer4:java.io.BufferedWriter@3ac748
    writer5:java.io.BufferedWriter@3ac748
    writer6:java.io.BufferedWriter@3ac748
    writer7:java.io.BufferedWriter@3ac748
    writer8:java.io.BufferedWriter@3ac748
    writer9:java.io.BufferedWriter@3ac748
    writer10:java.io.BufferedWriter@3ac748
    你们会发现除了第一个,后面都相等。
    但是如果你使用flush就会发现,他们还是自己对应自己的flush。能不能解释一下?