如何在Java中将内容追加到文本文件而不是覆盖它?

3

我正在尝试使用Java向文本文件添加一行。当我运行程序时,我想添加一行简单的内容,但是我的程序在写入新数据之前会删除文本文件中的所有旧数据。

以下是代码:

 FileWriter fw = null;
  PrintWriter pw = null;
    try {
        fw = new FileWriter("output.txt");
        pw = new PrintWriter(fw);

    pw.write("testing line \n");
        pw.close();
        fw.close();
    } catch (IOException ex) {
        Logger.getLogger(FileAccessView.class.getName()).log(Level.SEVERE, null, ex);
    }

1
Java I/O:如何将内容附加到已经存在的文本文件中。 - Poindexter
2
调用 pw.close(),会调用 fw.close()。 - Peter Lawrey
4个回答

23

更改此内容:

fw = new FileWriter("output.txt");
to
fw = new FileWriter("output.txt", true);

详见javadoc,可以了解到"append"默认情况为false的原因。

需要注意的是,通常不建议使用FileWriter类。更好的做法是使用OutputStreamWriter封装的FileOutputStream,这样可以指定要使用的字符编码,而不是使用操作系统默认值。


哇,竟然同时发布到秒...我以前从未见过这种情况。 :O - Powerlord
呀,我在想我应该接受谁的请求 :D - Afzaal
所以,毫无疑问,这使得Jon Skeet成为了赢家! - Buhake Sindi
@Afzaal:你说的“如何将文本添加到新行”是什么意思?不是很清楚… - Jon Skeet

6

改为这个:

fw = new FileWriter("output.txt");

转换为:

fw = new FileWriter("output.txt", true);
< p > FileWriter构造函数 的第二个参数是您是否要将内容追加到打开的文件中。这会导致文件指针在写入之前移动到文件末尾。


1

使用

fw = new FileWriter("output.txt", true);

来自JavaDoc

给定一个文件对象,构造一个FileWriter对象。如果第二个参数为true,则字节将被写入文件的末尾而不是开头。


1

两种选择:

  1. 困难的方法:读取整个文件,然后将其加上新数据写出。
  2. 简单的方法:以“追加”模式打开文件:new FileWriter( path, true );

为什么我要走捷径时,Sun已经提供了一个简便的选项呢?(我说了Sun?) :) - Buhake Sindi
一般情况下,你不会这么做。有些变态的老师可能会让你两种方式都尝试一遍,只是为了让你更加珍惜“简单的方式”。这个问题足够简单,可能会被标记为“作业”。但是,如果有选择的话...每次都选简单的方式。 - Mark Storer
为了维护Storer先生的利益,了解从简单方式到困难方式是否存在任何功能差异是很重要的,因为有些情况下简单方式可能不足以胜任。就像在这种情况下,如果您需要在写入文件之前了解文件内容的某些信息,例如您需要包括行号或总数等。 - Jay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接