为了账号安全,请及时绑定邮箱和手机立即绑定

文本文件被覆盖而不是保存的问题

文本文件被覆盖而不是保存的问题

函数式编程 2022-09-01 17:44:27
我有一个文本文件,我试图通过它在我的程序中写入。每当用户想要将图书添加到图书馆目录时,图书详细信息都将保存到文本文件中。问题是我的程序成功地写入了文本文件,但当我尝试添加另一本书时,它只会一遍又一遍地覆盖第一行。我有一个从Book类继承的ArrayList,它包含一本书的特定属性(标题,作者,出版商等)。在我当前的程序中,我创建了一个名为bookInfo的变量,该变量存储来自各自jTextFields的book属性的String和int值。我相信它是一个“类变量”(但我可能是错的),因为我将其初始化为书籍类的构造函数Book bookInfo = new Book(bookTitle, author, publisher, brandCallNumber, numberOfCopies);然后将此变量添加到 arrayList 中,并在程序中调用 WriteToFile() 方法。AddBookDialog 类的代码public class AddBookDialog extends javax.swing.JDialog {ArrayList<Book> books = new ArrayList<Book>();/** * Creates new form AddBook */public AddBookDialog(java.awt.Frame parent, boolean modal) {    super(parent, modal);    initComponents();}               private void jButtonSaveToLibraryActionPerformed(java.awt.event.ActionEvent evt) {                                                         String bookTitle = jTextFieldTitle.getText();    String author = jTextFieldAuthor.getText();    String publisher = jTextFieldPublisher.getText();    String brandCallNumber = jTextFieldBranchCallNumber.getText();    int numberOfCopies = Integer.parseInt(jTextFieldCopies.getText());        Book bookInfo = new Book(bookTitle, author, publisher, brandCallNumber, numberOfCopies);        books.add(bookInfo);        WriteToFile();    this.setVisible(false);}                                                    private void WriteToFile(){    WriteFile wf = new WriteFile("BookDetails.txt");        for(int i = 0; i < books.size(); i++)    {     Book b = books.get(i);     String bookDetails = b.getBookTitle() + " : " + b.getAuthorName() + " : " + b.getPublisherName() + " : " + b.getBranchCallNumber() + " : " + b.getNumberOfCopies();          wf.write(bookDetails);    }    wf.close();}我希望我的程序做的是不断添加到文本文件中。如果我添加另一本书,那么文本文件的内容应该包括哈利·波特 : JK 罗琳 : 学术 : FIC 罗尔 : 14哈姆雷特 : 威廉·莎士比亚 : 企鹅 : FIC 沙克 : 23相反,当我尝试将另一本书写入文件时,它会覆盖第一行。哈姆雷特 : 威廉·莎士比亚 : 企鹅 : FIC 沙克 : 23哈利·波特的书细节被覆盖了
查看完整描述

1 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

根据Javadoc的说法

public FileOutputStream(File file, boolean append) throw FileNotFoundException

创建文件输出流以写入由指定的 File 对象表示的文件。如果第二个参数为 true,则字节将写入文件末尾而不是开头。将创建一个新的 FileDescriptor 对象来表示此文件连接。

第二个参数 () 用于控制是否追加到现有文件而不是覆盖它。boolean append

因此,在您的情况下,您应该作为第二个参数传递true


查看完整回答
反对 回复 2022-09-01
  • 1 回答
  • 0 关注
  • 49 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信