如何在Java中(在不同时间)向文本文件添加多行?

时间:2019-04-06 03:12:04

标签: java

我正在尝试创建一个图书馆,所有图书的信息(作者和书名)都在一个文本文件中。我可以成功地将一本书添加到文本文件中,但是如果我尝试添加一本新书,它也会删除上一本书...如果有人可以帮助的话,我们将不胜感激!

String theTitle = bookTitleW.getText().toString();
String theAuthor = bookAuthorW.getText().toString();

try {
    BufferedWriter readMe = new BufferedWriter(new FileWriter("allBooks.txt"));
    readMe.write(theTitle + "," + theAuthor);
    readMe.newLine();
    readMe.close();
} catch (IOException c) {
    c.printStackTrace();
}

它会像预期的那样打印出输入的标题和作者,但是如果添加了任何新输入,它只会覆盖旧输入。

2 个答案:

答案 0 :(得分:0)

append标志作为true传递给编写者。

BufferedWriter readMe = new BufferedWriter(new FileWriter("allBooks.txt", true));

请参阅:https://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html#FileWriter(java.io.File,%20boolean)

答案 1 :(得分:0)

这里有两个问题。

首先,默认情况下,当您打开文件上的FileWriter时,它确实会重新创建文件。

可以选择:

FileWriter fw = new FileWriter('thefile.txt', true);

这将以“追加”模式打开文件,这意味着它从文件末尾开始,而不是重新创建。这样一来,您就可以逐步建立文件。

但是,毫无疑问,没有添加标志,FileWriter将会销毁任何现有文件。它不是“从头开始”。因此,您不能使用FileWriter更改现有文件。您可以完全重新创建它,也可以附加它。

一个简单的文本编辑器示例是一个程序,该程序可以读取整个文件,然后进行更改,然后将整个文件写回。

Java还有另一个类RandomAccessFile,它使您可以就地读取和写入现有文件。但是,如果除了现代的文本编码方法之外,没有其他原因,使用带有文本文件的RandomAccessFile会非常困难。添加不同长度的行也使难度增加。

RandomAccessFiles可以更轻松地处理事先知道长度的记录。