PrintWriter to append data if file exist

15,689

Once you call PrintWriter out = new PrintWriter(savestr); the file is created if doesn't exist hence first check for file existence then initialize it.

As mentioned in it's Constructor Docmentation as well that says:

If the file exists then it will be truncated to zero size; otherwise, a new file will be created.

Since file is created before calling f.exists() hence it will return true always and ìf block is never executed at all.

Sample code:

String savestr = "mysave.sav"; 
File f = new File(savestr);

PrintWriter out = null;
if ( f.exists() && !f.isDirectory() ) {
    out = new PrintWriter(new FileOutputStream(new File(savestr), true));
}
else {
    out = new PrintWriter(savestr);
}
out.append(mapstring);
out.close();

For better resource handling use Java 7 - The try-with-resources Statement

Share:
15,689
TheWaveLad
Author by

TheWaveLad

Student, especially interested in Image Processing, Numerical Analysis, Discrete and Numerical Optimization and Data Fusion Mathematics.

Updated on June 27, 2022

Comments

  • TheWaveLad
    TheWaveLad almost 2 years

    I have a savegame file called mysave.sav and I want to add data to this file if the file already exists. If the file doesn't exists, I want to create the file and then add the data.

    Adding data works fine. But appending data overwrites existing data. I followed the instructions of axtavt here (PrintWriter append method not appending).

        String savestr = "mysave.sav"; 
        File f = new File(savestr);
        PrintWriter out = new PrintWriter(savestr);
    
        if ( f.exists() && !f.isDirectory() ) {
            out = new PrintWriter(new FileOutputStream(new File(savestr), true));
            out.append(mapstring);
            out.close();
        }
        else {
            out.println(mapstring);
            out.close();
        }
    

    where mapstring is the string I want to append. Can you help me? Thank you!

  • TheWaveLad
    TheWaveLad almost 10 years
    Thank you, this works if I leave out the first line of the if block (out = new PrinterWriter(savestr)). I don't know if I'm allowed to edit your answer.
  • Braj
    Braj almost 10 years
    @pilky02 by mistake added. you are free to edit it. I am more than happy if you edit it.
  • Braj
    Braj almost 10 years
    Thanks for edit. please follow last link that might help you a lot.