如果文件存在,PrintWriter将附加数据

时间:2014-07-27 16:01:26

标签: java fileoutputstream printwriter

我有一个名为mysave.sav的savegame文件,如果该文件已存在,我想将数据添加到此文件中。如果该文件不存在,我想创建该文件,然后添加数据。

添加数据工作正常。但附加数据会覆盖现有数据。我遵循了axtavt的指示(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();
    }

其中mapstring是我要追加的字符串。你能帮助我吗?谢谢!

1 个答案:

答案 0 :(得分:5)

一旦你调用PrintWriter out = new PrintWriter(savestr);文件就会被创建(如果不存在)因此首先检查文件是否存在然后进行初始化。

正如Constructor Docmentation中提到的那样:

  

如果该文件存在,那么它将被截断为零大小;否则,将创建一个新文件。

由于文件是在调用f.exists()之前创建的,因此它将始终返回true并且永远不会执行ìf块。

示例代码:

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

为了更好地处理资源,请使用Java 7 - The try-with-resources Statement