Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.2k views
in Technique[技术] by (71.8m points)

java - PrintWriter to append data if file exist

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!

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
...