【问题标题】:How to appened data to a file using BufferedWriter and FileOutPutStream [duplicate]如何使用 BufferedWriter 和 FileOutPutStream 将数据附加到文件 [重复]
【发布时间】:2015-02-13 07:45:55
【问题描述】:

在下面的代码中,我尝试使用 FileOutputStreamBufferedWriter 将一些文本附加到文件中,如下所示。在 ru 时,尽管文件有一些数据,但当我使用 FileOutputStreamBufferedWriter我发现文件是空的,甚至我要附加的数据bw.write("new information"); 也不存在文件完全是空的。

请告诉我如何解决它。

代码

File f = new File(SystemConfig.getSystConfigInstance("E"));
    System.out.println(f.getAbsolutePath() + " name: " + f.getName());

    OutputStream os = new FileOutputStream(f);
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
    bw.write("new information");

【问题讨论】:

  • 如果你想立即看到效果,写完后调用 bw.flush() 会很好
  • @Adem 你能简单解释一下flush吗?
  • 流大多有一些缓冲区。当您在它们上写入一些数据时,它们首先会保留这些数据,直到它们的缓冲区已满。之后,他们进行了实际的写作。您可以通过调用将当前缓冲区数据写入目标的“flush()”来强制执行此操作

标签: java file-io inputstream outputstream bufferedwriter


【解决方案1】:

试试这个,FileOutputStream(File file, boolean append) with append

OutputStream os = new FileOutputStream(f, true);

如果 append 布尔值为 true,这意味着它将用旧内容附加新内容。

而不是

OutputStream os = new FileOutputStream(f);

FileOutputStream 也有默认的 append 方法。所以用它来附加旧的内容。

【讨论】:

  • 请问,第二个布尔参数是干什么用的?
  • 它是“追加”的标志,所以如果设置为'true',新文本将添加到现有文件中,如果设置为'false'则旧内容是在写入文件之前删除。
【解决方案2】:
    File f = new File(SystemConfig.getSystConfigInstance("E"));;
    System.out.println(f.getAbsolutePath() + " name: " + f.getName());

    OutputStream os = new FileOutputStream(f,true);
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
    bw.write("new information");    
    bw.close();

您错过了 FileOutputStream 的附加标志。然后只有它被创建为可附加的。否则它会像只读一样。

接下来,文件的结尾你需要关闭 writer。这样只有它会刷新整个数据。

【讨论】:

    【解决方案3】:

    试试这个(请注意传递给FileOutputStream的布尔值):

    File f = new File(SystemConfig.getSystConfigInstance("E"));
    System.out.println(f.getAbsolutePath() + " name: " + f.getName());
    
    OutputStream os = new FileOutputStream(f, true);  // <--- append = true
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
    bw.write("new information");
    

    更多信息请阅读the official doc of FileOutputStream

    FileOutputStream(文件文件,布尔附加)

    如果第二个参数为真,那么字节将被写入末尾 文件的开头而不是开头。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-20
      • 1970-01-01
      • 2016-03-25
      • 2018-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多