У меня есть текстовый файл, в который я пытаюсь писать в моей программе. Всякий раз, когда пользователь хочет добавить книгу в каталог библиотеки, сведения о книге будут сохранены в текстовом файле. Проблема в том, что моя программа успешно пишет в текстовый файл, но перезаписывает первую строку снова и снова, если я пытаюсь добавить другую книгу.
У меня есть ArrayList, который наследуется от класса Book, который содержит определенные атрибуты книги (название, автор, издатель и т. Д.)
В моей текущей программе я создал переменную с именем bookInfo , в которой хранятся значения String и int атрибутов book из соответствующих им полей jTextFields. Я считаю, что это «переменная класса» (но я могу ошибаться), потому что я инициализирую ее конструктором класса книги
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();
}
}
}
Я ожидаю, что моя программа будет постоянно добавлять текстовые файлы. Если я добавлю другую книгу, содержимое текстового файла должно состоять из
Гарри Поттер: Джоан Роулинг: Ученый: Фик Роул: 14
Гамлет: Уильям Шекспир: Пингвин: FIC Shak: 23
Вместо этого, когда я пытаюсь записать другую книгу в файл, вместо этого она перезаписывает первую строку
Гамлет: Уильям Шекспир: Пингвин: FIC Shak: 23
// Детали книги для Гарри Поттера перезаписаны