我一直在使用BufferedWriter对文本文件进行“记录”,我遇到了一个问题:
我运行以下代码..相当基本..
BufferedWriter out = new BufferedWriter(new FileWriter(path+fileName));
String str = "blabla";
out.write(str);
out.close();
我接下来要知道的是,有几行文本的整个文件已被清除,只有'blabla'存在。
我应该使用什么类来添加一个新行,文本为'blabla',而不必将整个文件文本添加到字符串中并在'blabla'之前将其添加到'str'?
答案 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