【问题标题】:PrintWriter appending lines after every execution (Not refreshing the file)PrintWriter 在每次执行后附加行(不刷新文件)
【发布时间】:2014-11-19 20:12:47
【问题描述】:

我对 java 很陌生,我正在将数据写入文件。我的代码如下所示:

File file= new File("model/file.csv");
FileOutputStream writer=null;
try {
    writer = new FileOutputStream(file, true);
} catch (IOException e) {
    e.printStackTrace();
}
PrintWriter pw=null;
pw = new PrintWriter(writer);
try {
    for (int j=0;j< 24; j++)
    pw.format("%.3f%n",MyData);
}
finally {
    pw.close();
} 

输出:

1
2
3
4

但是当我第二次运行程序时,我的输出文件如下所示:

输出:

1
2
3
4
1
2
3
4

好吧,我猜到了

 writer = new FileOutputStream(file, true);

表示它附加,但我希望文件被刷新并且不包含来自先前程序执行的数据。而且冲洗也无济于事。

【问题讨论】:

  • 所以提供true 意味着它附加。与此相反的是什么?
  • 然后它只会将一个值打印到文件中,例如我的输出:1
  • 不,不会。你试过了吗? (该参数仅在您第一次打开文件时适用。您只打开一次......)
  • 你的预期输出是什么?

标签: java file csv filewriter printwriter


【解决方案1】:

我的建议是使用FileWriterlike

以下语法创建一个 FileWriter 对象,给定一个文件名,该文件名带有一个布尔值,指示是否附加写入的数据。

FileWriter(String fileName, boolean append) 

将布尔值设置为 false 表示您不想执行附加操作。

例如

   try (PrintWriter out = new PrintWriter(new FileWriter("login.txt", false));) {

        for (int i = 0; i < 10; i++) {
            out.println(i);
        }

    } catch (IOException e) {
      System.out.println(e);
    }

Read About The Try-With-Resources

【讨论】:

    【解决方案2】:

    FileOutputStream API 表明附加参数将...附加到文件!所以把它改成假的,或者把它关掉。

    writer = new FileOutputStream(file);
    

    【讨论】:

    • 没有帮助,我的输出只会得到一个值 例如,它看起来像这样: 1 其他数字缺失。 (2,3,4)
    猜你喜欢
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多