java - 文本文件被覆盖而不是保存的问题
问题描述
我有一个文本文件,我试图通过它在我的程序中写入。每当用户想要将书籍添加到图书馆目录时,书籍详细信息将保存到文本文件中。问题是我的程序成功写入文本文件,但如果我尝试添加另一本书,它只会一遍又一遍地覆盖第一行。
我有一个继承自 Book 类的 ArrayList,它包含一本书的特定属性(标题、作者、出版商等)
在我当前的程序中,我创建了一个名为bookInfo的变量,该变量存储书籍属性的 String 和 int 值,这些值来自它们各自的 jTextField。我相信它是一个“类变量”(但我可能错了)因为我将它初始化为 book 类的构造函数
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();
}
WriteFile类的代码
public class WriteFile{
private FileOutputStream filename;
public WriteFile(String inputfilename)
{
try
{
filename = new FileOutputStream(inputfilename,false);
}
catch (IOException e) {}
}
public void write(String item)
{
PrintStream output = new PrintStream(filename);
output.println(item);
}
public void close()
{
try
{
filename.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
我希望我的程序做的是不断添加到文本文件中。如果我添加另一本书,那么文本文件的内容应该包括
哈利波特:JK 罗琳:学术:FIC 罗琳:14
哈姆雷特:威廉莎士比亚:企鹅:FIC Shak:23
相反,当我尝试将另一本书写入文件时,它会覆盖第一行
哈姆雷特:威廉莎士比亚:企鹅:FIC Shak:23
//哈利波特的书详情被覆盖
解决方案
根据Javadoc:
公共 FileOutputStream(文件文件,布尔附加)抛出 FileNotFoundException
创建一个文件输出流以写入由指定 File 对象表示的文件。如果第二个参数为真,那么字节将被写入文件的末尾而不是开头。创建一个新的 FileDescriptor 对象来表示此文件连接。
第二个参数 ( boolean append
) 用于控制是否附加到现有文件而不是覆盖它。
true
所以在你的情况下,你应该作为你的第二个参数传递
推荐阅读
- python-3.x - 为什么用 -9999 替换缺失值?
- huawei-mobile-services - 华为地图套件 - 崩溃点击返回按钮
- java - ExecutorService submit() - 并行执行(非阻塞)
- c# - .NET Framework - 环境变量返回 null
- perforce - 我们如何在 WIN server 2019 中为 perforce depot 安装和设置 Perforce 文件资源管理器 P4vx?
- signalr - 如何使用 aspnet core SignalR 向用户发送私人消息?
- java - 请求数组中的循环
- apache-spark - 如何为火花任务或地图操作设置超时?(或跳过长时间运行的任务)
- r - 在 R 中恢复 HoltWinters 预测的固定数据
- rest - 对于 REST 服务中的应用程序错误,建议使用哪种 HTTP 状态代码?