Проблема с перезаписью текстового файла вместо сохранения - PullRequest
0 голосов
/ 25 марта 2019

У меня есть текстовый файл, в который я пытаюсь писать в моей программе. Всякий раз, когда пользователь хочет добавить книгу в каталог библиотеки, сведения о книге будут сохранены в текстовом файле. Проблема в том, что моя программа успешно пишет в текстовый файл, но перезаписывает первую строку снова и снова, если я пытаюсь добавить другую книгу.

У меня есть 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

// Детали книги для Гарри Поттера перезаписаны

1 Ответ

0 голосов
/ 25 марта 2019

Согласно Javadoc :

public FileOutputStream (Файловый файл, логическое добавление) выдает FileNotFoundException

Создает поток вывода файла для записи в файл, представленный указанным объектом File. Если второй аргумент равен true, байты будут записаны в конец файла, а не в начало. Новый объект FileDescriptor создается для представления этого файлового соединения.

Второй аргумент (boolean append) используется для управления добавлением к существующему файлу вместо его переопределения.

Так что в вашем случае вы должны передать true в качестве второго аргумента

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...