我正在尝试创建一个图书馆,所有图书的信息(作者和书名)都在一个文本文件中。我可以成功地将一本书添加到文本文件中,但是如果我尝试添加一本新书,它也会删除上一本书...如果有人可以帮助的话,我们将不胜感激!
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();
}
它会像预期的那样打印出输入的标题和作者,但是如果添加了任何新输入,它只会覆盖旧输入。
答案 0 :(得分:0)
将append
标志作为true
传递给编写者。
BufferedWriter readMe = new BufferedWriter(new FileWriter("allBooks.txt", true));
答案 1 :(得分:0)
这里有两个问题。
首先,默认情况下,当您打开文件上的FileWriter
时,它确实会重新创建文件。
可以选择:
FileWriter fw = new FileWriter('thefile.txt', true);
这将以“追加”模式打开文件,这意味着它从文件末尾开始,而不是重新创建。这样一来,您就可以逐步建立文件。
但是,毫无疑问,没有添加标志,FileWriter将会销毁任何现有文件。它不是“从头开始”。因此,您不能使用FileWriter更改现有文件。您可以完全重新创建它,也可以附加它。
一个简单的文本编辑器示例是一个程序,该程序可以读取整个文件,然后进行更改,然后将整个文件写回。
Java还有另一个类RandomAccessFile
,它使您可以就地读取和写入现有文件。但是,如果除了现代的文本编码方法之外,没有其他原因,使用带有文本文件的RandomAccessFile会非常困难。添加不同长度的行也使难度增加。
RandomAccessFiles可以更轻松地处理事先知道长度的记录。