java - 如何覆盖文本文件特定部分的整数?
问题描述
我有一个名为“BookDetails.txt”的文本文件
它的格式为书名、作者、出版商、分支索书号和副本数,如下所示:
1984:乔治奥威尔:企鹅:FIC Orw:23
在我的程序中,当顾客签出特定书籍时,我试图将副本数量从 23 覆盖到 22(基本上减一)
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();
}
我的程序成功地找到了一本特定的书及其副本数(如果剩下 0 个副本,它会生成 JOptionPane)。但是,我不确定如何覆盖和更新文本文件中的特定元素。我做了一些研究,似乎 RandomAccessFile 可能是一种可能的选择。RAF 是我的问题的可行解决方案,还是我可以采取其他选择?
解决方案
推荐阅读
- node.js - AWS lamda解析器不解析多部分表单数据
- c++ - 无法清除字符串引用
- reactjs - 在 Slick 内第一次单击时,锚标记“ ”不起作用
- azure - 还原加入域的加密虚拟机
- android - 具有单一事实来源的 Android 用例
- lisp - 列表中位置 n 的元素是什么
- django - 带有外部存储的 url.py settings.py 和 Dropbox
- python-3.x - Django - 表单未保存到 Db
- r - 选择具有多个 if 和 if else 语句的行 (R)
- javascript - 执行 php 脚本后的 JavaScript 警报窗口