【问题标题】:Writing txt to file without appending将txt写入文件而不附加
【发布时间】:2014-01-11 15:45:21
【问题描述】:

好的,所以我正在实施一个系统,如果我将计数保存在 .txt 文件中。

计数是一个整数。

我唯一的问题是,不是替换以前的计数;例如

"78" -> "79"

它正在将新计数添加到以前的计数中;例如

"78" -> "7879"

我的代码是:

private static void saveCount(int inCount) throws FileNotFoundException, IOException {
    BufferedReader fbr = new BufferedReader(new FileReader("count.txt"));
    try (FileWriter fw = new FileWriter("count.txt", (fbr.readLine() != null))) {
        String count = Integer.toString(inCount);
        fw.write(count);
    }
}

【问题讨论】:

    标签: java string io


    【解决方案1】:

    FileWriter 构造函数的第二个参数是一个布尔标志append。将其设置为 false 以覆盖文件而不是追加。

    【讨论】:

      【解决方案2】:

      您正在启用追加。将(fbr.readLine()!=null)替换成false可以禁用追加,如下图:

      private static void saveCount(int inCount) throws FileNotFoundException, 
              IOException {
          BufferedReader fbr = new BufferedReader(new FileReader("count.txt"));
          try (FileWriter fw = new FileWriter("count.txt", false)) {
              String count = Integer.toString(inCount);
              fw.write(count);
          }
      }
      

      【讨论】:

      • @JunedAhsan 它运行良好。也许之前的编辑有问题?
      • 注意:您可以从答案中删除 BufferedReader,因为它不再需要。
      • 我知道,但我不想违反用户原始代码,只是放什么能解决问题。
      • -1,“不想违反用户原始代码”不是在代码中留下无用的杂物的借口。您已经删除了使用了fbr 的唯一部分,那么为什么不完成这项工作呢?
      【解决方案3】:

      您使用的 FileReader 的构造函数有一个参数 append(布尔值)。如果它是真的 - 你将附加文件的内容(并有 7879)。如果它为 false - 文件的内容将被覆盖。

      看来 fbr.readLine() 不为空,因此您每次都附加内容。

      【讨论】:

        【解决方案4】:

        使用 BufferedWriter 插入 BufferedReader 并在完成后关闭它。

            BufferedWriter out = new BufferedWriter(new FileWriter("count.txt"));
            out.write(Integer.toString(inCount));
            out.close();
        

        【讨论】:

          猜你喜欢
          • 2021-10-17
          • 2012-06-18
          • 2021-05-05
          • 2021-12-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-02
          相关资源
          最近更新 更多