Как переписать целое число в определенной части текстового файла? - PullRequest
0 голосов
/ 26 марта 2019

У меня есть текстовый файл с именем "BookDetails.txt"

Он форматируется в названии книги, авторе, издателе, номере вызова филиала и количестве копий следующим образом:

1984: Джордж Оруэлл: Пингвин: FIC Orw: 23

В моей программе я пытаюсь перезаписать количество копий с 23 до 22 (существенно уменьшив его на единицу), когда патрон проверяет конкретныйbook

public class CheckOutDialog extends javax.swing.JDialog {
private static final DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
ArrayList<CheckOut> checkOuts = new ArrayList<CheckOut>();
String bookTitle; 
int numberOfCopies;
/** 
 * Creates new form CheckOutDialog
 */
public CheckOutDialog(java.awt.Frame parent, boolean modal) {
    super(parent, modal);
    initComponents();
    Date currentDate = new Date();
    jTextFieldDate.setText(df.format(currentDate));
}


private void jButtonCheckOutActionPerformed(java.awt.event.ActionEvent evt) {                                                
    String firstName = jTextFieldFirstName.getText();
    String lastName = jTextFieldLastName.getText();
    bookTitle = jTextFieldBookTitle.getText();
    String checkOutDate = jTextFieldDate.getText();

    CheckOut checkOutInfo = new CheckOut(firstName, lastName, bookTitle, checkOutDate);

    checkOuts.add(checkOutInfo);

    CheckOutCopy();
}                                               

public void CheckOutCopy() //This method checks for book and num of copies
{
     try {
        File f = new File("BookDetails.txt");
        Scanner fileRead = new Scanner(f);

        boolean foundTitle = false;
        fileRead.nextLine();
        while(fileRead.hasNextLine())
        {
            String textLine = fileRead.nextLine();
            String[] bookInfo = textLine.split(" : ");
            String tempBookTitle = bookInfo[0];
            numberOfCopies = Integer.parseInt(bookInfo[4]);


            if(tempBookTitle.trim().equals(bookTitle))
            {
                foundTitle = true;
                break;
            }
        }
        if(foundTitle && numberOfCopies > 0)
        { 
           OverwriteCopies();
           WriteCheckOut();
           this.setVisible(false);
        }
            else if(numberOfCopies == 0)
            {
                if(JOptionPane.showConfirmDialog(null, "Would you like to add the patron to the queue?", "No copies available", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION)
                {
                    AddPatronQueue();
                }
                else
                {
                    JOptionPane.getRootFrame().dispose();
                }
            }
        else
        {
            JOptionPanes.messageBox("Book was not found in Library Catalog", "Check Out Error");
        }

    } catch (FileNotFoundException ex) {
        ex.printStackTrace();
    }
}

 private void OverwriteCopies()
{
    numberOfCopies--;

    //Unsure how to proceed from here
}


private void WriteCheckOut()
{
    WriteFile wf = new WriteFile("CheckOutDetails.txt");

    for(int i = 0; i < checkOuts.size(); i++)
    {
        CheckOut c = checkOuts.get(i);

        String checkOutDetails =  c.getFirstName() + " : " + c.getLastName() + " : " + c.getBookTitle() + " : " + c.getCheckOutDate();

        wf.write(checkOutDetails);
    }
    wf.close();
}

Моя программа успешно находит определенную книгу и количество ее копий (и создает JOptionPane, если у нее осталось 0 копий).Однако я не уверен, как можно перезаписать и обновить этот конкретный элемент в текстовом файле.Я провел некоторое исследование, и кажется, что RandomAccessFile может быть одним из возможных вариантов.Является ли RAF реальным решением моей проблемы или есть другой вариант, который я могу выбрать?

...