【问题标题】:How to write a new line to a file in Java?如何在Java中将新行写入文件?
【发布时间】:2013-11-22 20:50:17
【问题描述】:

我正在使用PrintWriter 类将新行写入文件。它按预期写入行,但是当我想写入新数据时,它会覆盖旧数据而不是写入新行。这是我目前所拥有的。

import javax.swing.*;
import java.text.*;
import java.util.*;
import java.io.*;

public class TimeTracker 
{

    /**
    * @param args the command line arguments
    * @throws java.io.FileNotFoundException
    */
    public static void main(String[] args) throws FileNotFoundException 
    {
        DecimalFormat money = new DecimalFormat("$#,##0.00");
        PrintWriter toFile = new PrintWriter("timeWorked.dat");
        Scanner readFile = new Scanner(new FileReader("timeWorked.dat"));

        String client = JOptionPane.showInputDialog("Client's Name");
        int rate = Integer.parseInt(JOptionPane.showInputDialog("Rate per hour?"));
        String output;
        output = "Client's Name: " + client +
                 " Pay rate agreed: " + money.format(rate) + " per hour";
        toFile.append(output);
        toFile.flush();          
        if (readFile.hasNext())
        {
            toFile.append("\n");
            toFile.write(output);
            toFile.flush();
        }
        JOptionPane.showMessageDialog(null, readFile.nextLine());
    }

 }

【问题讨论】:

  • 您同时读写同一个文件?故意的?
  • 是的,我做了 readFile 来检查文件是否有一行,如果有,我希望它写一个新行而不覆盖旧行,但不能让它工作。跨度>

标签: java printwriter


【解决方案1】:

通过阅读PrintWriterjavadoc,您可以了解到,在使用文件名作为构造函数参数创建实例时,文件(如果存在)将被截断为零大小。

相反,您可以使用FileWriter。查看示例here。 并且不要错过使用带有布尔参数的重载构造函数,例如new FileWriter("timeWorked.dat", true),打开文件进行追加。

【讨论】:

  • +1。加上 OP 的原始解决方案导致将输入数据写入文件两次
  • Cool the FileWriter 工作了!,因为我是 Java 新手,我们几乎没有学习过 PrintWriter,所以从没想过使用它,不过谢谢!
【解决方案2】:

来自 PrintWriter 的 javadoc:

参数: fileName 用作此 writer 目标的文件的名称。 如果文件存在,则将其截断为零;否则,将创建一个新文件。输出将被写入文件并被缓冲。

我想这就是问题所在:)

要解决您的问题,请使用 FileWriter 类,如下所示:

new FileWriter("timeWorked.dat", true)

布尔参数 true 告诉 FileWriter 打开文件进行追加。这意味着您写入文件的数据将在末尾添加。

【讨论】:

    【解决方案3】:

    这对我有用:

    File file = new File("output.txt");
    FileOutputStream outputStream = new FileOutputStream(file, false);
    PrintWriter out = new PrintWriter(outputStream, true);
    out.println("test");
    

    【讨论】:

      猜你喜欢
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 2017-02-04
      • 1970-01-01
      • 1970-01-01
      • 2016-05-26
      • 2013-03-02
      • 1970-01-01
      相关资源
      最近更新 更多