PrintWriter附加方法未附加

问题描述 投票:47回答:5

以下方法只会写出我添加的最新项目,而不会追加到以前的条目中。我在做什么错?

public void addNew() {
    try {
        PrintWriter pw = new PrintWriter(new File("persons.txt"));
        int id = Integer.parseInt(jTextField.getText());
        String name = jTextField1.getText();
        String surname = jTextField2.getText();
        Person p = new Person(id,name,surname);
        pw.append(p.toString());
        pw.append("sdf");
        pw.close();
    } catch (FileNotFoundException e) {...}
}
java printwriter
5个回答
91
投票

PrintWriter的方法称为append()的事实并不意味着它会更改正在打开的文件的模式。

您还需要以附加模式打开文件:

PrintWriter pw = new PrintWriter(new FileOutputStream(
    new File("persons.txt"), 
    true /* append = true */)); 

还请注意,文件将以系统默认编码写入。并非总是如此,它可能会导致互操作性问题,您可能需要显式指定文件编码。


17
投票
PrintWriter pw = new PrintWriter(new FileOutputStream(new File("persons.txt"),true));

true是附加标志。参见documentation


12
投票

以附加模式打开文件,如以下代码所示:

 PrintWriter pw = new PrintWriter(new FileOutputStream(new File("persons.txt"), true)); 

11
投票

恕我直言,接受的答案没有考虑到意图是写字符这一事实。 (我知道这个话题很旧,但是由于在寻找相同的话题时,我偶然发现了这篇文章,然后才找到建议的解决方案,我在这里发表。)

FileOutputStream docs,要打印字节时使用FileOutputStream

FileOutputStream用于写入原始字节流,例如图像数据。要编写字符流,请考虑使用FileWriter。

此外,来自FileOutputStream

除非需要提示输出,否则建议将任何其write()操作可能为Writer的Writer周围的BufferedWriter昂贵,例如FileWriters和OutputStreamWriters。

最后,答案将是以下(如BufferedWriter docs所述:]

BufferedWriter

此外,从Java 7开始,您可以使用try-with-resources语句。没有需要finally块来关闭已声明的资源,因为它是自动处理的,也不太冗长:

in this other StackOverFlow post

1
投票

您无需像所有其他答案中所示的那样加倍缓冲。您可以简单地执行

PrintWriter out = null;
try {
    out = new PrintWriter(new BufferedWriter(new FileWriter("writePath", true)));
    out.println("the text");
}catch (IOException e) {
    System.err.println(e);
}finally{
    if(out != null){
        out.close();
    }
} 
© www.soinside.com 2019 - 2024. All rights reserved.