将字符串输出到文件中,而不清除文件

时间:2012-08-04 14:59:04

标签: java

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

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

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

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

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

3 个答案:

答案 0 :(得分:4)

  

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

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

然而:

  • 无论如何,我建议不要使用FileWriter,因为您无法指定编码。虽然很烦人,但最好使用FileOutputStream并使用正确的编码将其包装在OutputStreamWriter中。
  • 使用path + fileName

    ,而不是使用File组合目录和文件名。
    new File(path, fileName);
    

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

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

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

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()'
}

答案 1 :(得分:3)

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

答案 2 :(得分:1)

try {
    PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("outfilename", true)));
    out.println("the text");
    out.close();
} catch (IOException e) {
    //oh noes!
}

上述内容应该有效:Source Reference