1

我一直在使用 BufferedWriter 对文本文件进行某种“记录”,但遇到了一个问题:

我运行以下代码..相当基本..

BufferedWriter out = new BufferedWriter(new FileWriter(path+fileName));
String str = "blabla";
out.write(str);
out.close();

接下来我知道的是,包含几行文本的整个文件已被清除,只有“blabla”存在。

我应该使用什么类使它添加一个带有文本'blabla'的新行,而不必将整个文件文本转换为字符串并将其添加到'blabla'之前的'str'?

4

3 回答 3

4

我应该使用什么类使它添加一个带有文本'blabla'的新行,而不必将整个文件文本转换为字符串并将其添加到'blabla'之前的'str'?

您正在使用正确的类(好吧,也许 - 见下文) - 您只是没有检查构造选项。您希望FileWriter(String, boolean)构造函数重载,其中第二个参数确定是否附加到现有文件。

然而:

  • 无论如何,我建议您反对FileWriter,因为您无法指定编码。尽管很烦人,但最好使用正确的编码FileOutputStream将其包装起来。OutputStreamWriter
  • 不要使用path + fileName来组合目录和文件名,而是使用File

    new File(path, fileName);
    

    这让核心库可以处理不同的目录分隔符等。

  • 确保使用finally块关闭输出(这样即使抛出异常也可以清理),或者如果您使用的是 Java 7,则使用“try-with-resources”块。

所以把它们放在一起,我会使用:

String encoding = "UTF-8"; // Or use a Charset
File file = new File(path, fileName);
BufferedWriter out = new BufferedWriter(
    new OutputStreamWriter(new FileOutputStream(file, true), encoding));
try {
   out.write(...);
} finally {
   out.close()'
}
于 2012-08-04T15:02:01.240 回答
3

尝试使用FileWriter(filename, append) where append 为 true。

于 2012-08-04T15:01:46.317 回答
1
try {
    PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("outfilename", true)));
    out.println("the text");
    out.close();
} catch (IOException e) {
    //oh noes!
}

以上应该工作:源参考

于 2012-08-04T15:01:46.567 回答