PrintWriter append method not appending

心已入冬 提交于 2019-11-26 03:44:55

问题


The following method only writes out the latest item I have added, it does not append to previous entries. What am I doing wrong?

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

回答1:


The fact that PrintWriter's method is called append() doesn't mean that it changes mode of the file being opened.

You need to open file in append mode as well:

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

Also note that file will be written in system default encoding. It's not always desired and may cause interoperability problems, you may want to specify file encoding explicitly.




回答2:


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

The true is the append flag. See documentation.




回答3:


Open the file in append mode, as with the following code:

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



回答4:


IMHO the accepted answer does not consider the fact that the intention is to write characters. (I know the topic is old, but since while searching for the same topic I stumbled upon this post before finding the advised solution, I am posting here.)

From the FileOutputStream docs, you use FileOutputStream when you want to print bytes.

FileOutputStream is meant for writing streams of raw bytes such as image data. For writing streams of characters, consider using FileWriter.

Besides, from the BufferedWriter docs:

Unless prompt output is required, it is advisable to wrap a BufferedWriter around any Writer whose write() operations may be costly, such as FileWriters and OutputStreamWriters.

Finally, the answer would be the following (as mentioned 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();
    }
} 

Also, as of Java 7, you can use a try-with-resources statement. No finally block is required for closing the declared resource(s) because it is handled automatically, and is also less verbose:

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


来源:https://stackoverflow.com/questions/8210616/printwriter-append-method-not-appending

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!