PrintWriter附加方法不附加

时间:2011-11-21 10:54:12

标签: java printwriter

以下方法仅写出我添加的最新项目,它不会附加到以前的条目。我做错了什么?

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) {...}
}

5 个答案:

答案 0 :(得分:84)

PrintWriter的方法被称为append()这一事实并不意味着它改变了正在打开的文件的模式。

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

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

另请注意,文件将以系统默认编码方式写入。它并不总是需要并且可能导致互操作性问题,您可能希望明确指定文件编码。

答案 1 :(得分:17)

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

true是附加标志。请参阅documentation

答案 2 :(得分:12)

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

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

答案 3 :(得分:9)

恕我直言,接受的答案并没有考虑到意图是写字的事实。 (我知道这个话题已经过时了,但是因为在搜索同一主题时我偶然发现了这个帖子,然后才找到建议的解决方案,我在这里发帖。)

FileOutputStream docs开始,如果要打印字节,请使用FileOutputStream

  

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

此外,来自BufferedWriter docs

  

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

最后,答案如下(如上所述in this other StackOverFlow post):

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();
    }
} 
     

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

try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("writePath", true)))) {
    out.println("the text");
}catch (IOException e) {
    System.err.println(e);
}

答案 4 :(得分:2)

您不需要像其他所有答案中所示的那样加倍缓冲。 您只需完成

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