【问题标题】:Java Input stream appending without deletingJava 输入流追加而不删除
【发布时间】:2014-12-04 14:56:45
【问题描述】:

如何在FileInputStream(...) 之后将数据附加到文件中而不使其干净?

这就是我从HashMap <String, String> storage 追加的方式:

DataOutputStream stream = new DataOutputStream(new FileOutputStream("myfile.dat"));
    for (Map.Entry<String, String> entry : storage.entrySet()) {
        byte[] bytesKey = entry.getKey().getBytes("UTF-8"); //I need to write using UTF8
        stream.writeInt(bytesKey.length);
        stream.write(bytesKey);
        byte[] bytesVal = entry.getValue().getBytes("UTF-8");
        stream.write(bytesVal);
    }
    stream.close();

所以,问题是当我再次打开它时,它会清除文件中所有以前的数据。如何避免?

【问题讨论】:

标签: java file append


【解决方案1】:

将 true 参数添加到 FileOutputStream 以便它追加

DataOutputStream stream = new DataOutputStream(new FileOutputStream("myfile.dat", true));

【讨论】:

  • 不,问题是当我再次打开程序时,它会清除文件中所有以前的数据。如何避免这种情况?标记true 不能解决这个问题
  • 您可以通过按照我解释的方式构建 FileOutputStream 来解决这个问题,以便它以附加模式启动
  • 看:1)我启动程序 2)在我的文件中写入数据 3)终止程序 4)打开文件,我看到我写的所有数据 5)再次启动程序 6)再次写入 7)终止 8) 查看文件,但没有我第一次写的数据。只有我上次附加的最后一个数据。这就是问题
  • 对不起。糟透了,这里不准说坏话,我好散。问题是我的 8 个函数之一称为 PrintWriter,因此它清除了所有数据……谢谢! =)
【解决方案2】:

请看到此答案的每个人都尽可能注意。我花了一整天的时间来解决这个问题,只是因为我的一个课程叫PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("myfilename", "UTF8"));,所以这清除了我的文件。

祝你好运!

【讨论】:

    猜你喜欢
    • 2013-06-10
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多