如何用Java写一个新文件到一个文件?

时间:2013-11-22 20:50:17

标签: java printwriter

我正在使用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());
    }

 }

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

来自PrintWriter的javadoc:

  

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

我猜这就是问题:)

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

new FileWriter("timeWorked.dat", true)

布尔参数true告诉FileWriter打开要附加的文件。这意味着您写入文件的数据将在最后添加。

答案 2 :(得分:0)

这对我有用:

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