gpt4 book ai didi

java - 无法避免覆盖文本文件上的所有内容

转载 作者:行者123 更新时间:2023-12-01 08:52:00 24 4
gpt4 key购买 nike

几天前,我发布了有关我正在为学校做的一个项目的信息,我得到了一些非常有用的帮助,使我能够进一步推进我的项目。尽管如此,还是出现了其他情况。在我正在做的这个程序中,我的目的是为马输入不同的“训练方法”。这是由用户在程序中输入的,旨在将该训练方法写入文本文件。这工作得很好,但是假设我想为另一匹马输入另一种训练方法。这种情况会发生,但第一匹马的输入将被完全删除,只有最后写入文本文件的内容将保留。有谁知道为什么会这样以及我可以采取哪些步骤来解决它?谢谢你! (抱歉,代码很长,我只是不知道哪一部分可能会弄乱我的程序)

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.StringTokenizer;
import javax.swing.JOptionPane;


public AddNutrition() {
initComponents();




NutritionCB.removeAllItems();
NutritionCB.addItem("Choose Horse...");

try{
FileReader horseReader = new FileReader("HorseFile.txt");
BufferedReader horseBuffer = new BufferedReader(horseReader);
String record = "";
while((record = horseBuffer.readLine())!=null)
{
StringTokenizer tokenizerHorse = new StringTokenizer(record,",");
String vHorseID = tokenizerHorse.nextToken();
String vHorseName = tokenizerHorse.nextToken();
String vHorseBreed = tokenizerHorse.nextToken();
String vHorseDOB = tokenizerHorse.nextToken();
String vHorseHeight = tokenizerHorse.nextToken();
String vHorseHandSize = tokenizerHorse.nextToken();

NutritionCB.addItem(vHorseBreed + "_" + vHorseName);
}
horseBuffer.close();
}
catch (Exception Error) {
System.out.println("Error in reading file.");
}
}


@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

jLabel1 = new javax.swing.JLabel();
NutritionCB = new javax.swing.JComboBox<>();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
jLabel4 = new javax.swing.JLabel();
jLabel5 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
jLabel7 = new javax.swing.JLabel();
jLabel8 = new javax.swing.JLabel();
HorseID = new javax.swing.JTextField();
HorseName = new javax.swing.JTextField();
HorseBreed = new javax.swing.JTextField();
HorseDOB = new javax.swing.JTextField();
HorseHeight = new javax.swing.JTextField();
HorseHandSize = new javax.swing.JTextField();
jLabel9 = new javax.swing.JLabel();
jLabel10 = new javax.swing.JLabel();
jLabel11 = new javax.swing.JLabel();
FoodName = new javax.swing.JTextField();
FoodQuantity = new javax.swing.JTextField();
FoodTime = new javax.swing.JTextField();
LoadButton = new javax.swing.JToggleButton();
jButton1 = new javax.swing.JButton();

jLabel1.setFont(new java.awt.Font("Lucida Grande", 0, 24)); // NOI18N
jLabel1.setText("Add Horse Nutrition");

jLabel2.setText("Select Horse:");

jLabel3.setText("Horse ID");

jLabel4.setText("Horse Name");

jLabel5.setText("Horse Breed");

jLabel6.setText("Horse DOB");

jLabel7.setText("Horse Height");

jLabel8.setText("Horse Handsize");

HorseID.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
HorseIDActionPerformed(evt);
}
});

jLabel9.setText("Food Name:");

jLabel10.setText("Food Quantity:");

jLabel11.setText("Food Time:");

FoodName.setToolTipText("");
FoodName.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
FoodNameActionPerformed(evt);
}
});

LoadButton.setText("Load Horse");
LoadButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
LoadButtonActionPerformed(evt);
}
});

jButton1.setText("Save");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel1)
.addGap(213, 213, 213))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(37, 37, 37)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel3)
.addComponent(jLabel7)
.addComponent(jLabel6))
.addGap(28, 28, 28))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel4)
.addComponent(jLabel5))
.addGap(46, 46, 46))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addComponent(jLabel8)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(HorseBreed, javax.swing.GroupLayout.DEFAULT_SIZE, 105, Short.MAX_VALUE)
.addComponent(HorseDOB)
.addComponent(HorseHandSize)
.addComponent(HorseHeight)
.addComponent(HorseName)
.addComponent(HorseID))
.addGap(87, 87, 87)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jLabel11)
.addComponent(jLabel10)
.addComponent(jLabel9))
.addGap(42, 42, 42)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(FoodQuantity, javax.swing.GroupLayout.DEFAULT_SIZE, 118, Short.MAX_VALUE)
.addComponent(FoodTime)
.addComponent(FoodName)))
.addGroup(layout.createSequentialGroup()
.addComponent(jLabel2)
.addGap(64, 64, 64)
.addComponent(NutritionCB, javax.swing.GroupLayout.PREFERRED_SIZE, 200, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(LoadButton))))
.addGroup(layout.createSequentialGroup()
.addGap(278, 278, 278)
.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 119, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(128, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(18, 18, 18)
.addComponent(jLabel1)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(79, 79, 79)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel9)
.addComponent(FoodName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(21, 21, 21)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel10)
.addGroup(layout.createSequentialGroup()
.addGap(1, 1, 1)
.addComponent(FoodQuantity, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel11)
.addComponent(FoodTime, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(NutritionCB, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel2)
.addComponent(LoadButton))
.addGap(49, 49, 49)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(HorseID, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel4)
.addComponent(HorseName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel5)
.addComponent(HorseBreed, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(HorseDOB, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel6))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(HorseHeight, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel7))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(HorseHandSize, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel8))))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 38, Short.MAX_VALUE)
.addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 38, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(21, 21, 21))
);
}// </editor-fold>

private void HorseIDActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}

private void FoodNameActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}

private void LoadButtonActionPerformed(java.awt.event.ActionEvent evt) {
String CBHorseLoading = NutritionCB.getSelectedItem()+"";
StringTokenizer stCBHorseLoad = new StringTokenizer(CBHorseLoading,"_");
String HCBBreed = stCBHorseLoad.nextToken().trim();
String HCBHorse = stCBHorseLoad.nextToken().trim();

try {
FileReader horseReader = new FileReader("HorseFile.txt");
BufferedReader horseBuffer = new BufferedReader(horseReader);
String record = "";
while((record = horseBuffer.readLine())!=null)
{
StringTokenizer TokenizerHorse = new StringTokenizer(record,",");
String vHorseID = TokenizerHorse.nextToken();
String vHorseName = TokenizerHorse.nextToken();
String vHorseBreed = TokenizerHorse.nextToken();
String vHorseDOB = TokenizerHorse.nextToken();
String vHorseHeight = TokenizerHorse.nextToken();
String vHorseHandSize = TokenizerHorse.nextToken();
if (HCBHorse.equals(vHorseName)){
System.out.println();

HorseID.setText(vHorseID);
HorseName.setText(vHorseName);
HorseBreed.setText(vHorseBreed);
HorseDOB.setText(vHorseDOB);
HorseHeight.setText(vHorseHeight);
HorseHandSize.setText(vHorseHandSize);


}

}
horseBuffer.close();
}
catch(Exception Error){
System.out.println("Error in loading horse.");
}


// TODO add your handling code here:
}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
boolean entryError = false;
if(FoodName.getText().equals(""))
{
JOptionPane.showMessageDialog(null, "Enter the Horse Food Name.","Error.",JOptionPane.ERROR_MESSAGE);
entryError = true;

}
if(FoodQuantity.getText().equals("")&& entryError==false)
{
JOptionPane.showMessageDialog(null, "Enter the Horse Food Quantity.","Error.",JOptionPane.ERROR_MESSAGE);
entryError = true;

}
if(FoodTime.getText().equals("")&& entryError == false)
{
JOptionPane.showMessageDialog(null, "Enter the Horse Food Times.","Error.",JOptionPane.ERROR_MESSAGE);
entryError = true;

}

if(entryError == false)
{


try {
FileWriter tWriter = new FileWriter("HorseNutrition.txt");
PrintWriter tPrinter = new PrintWriter(tWriter);

tPrinter.println(HorseID.getText() + "," + FoodName.getText() + "," + FoodQuantity.getText() + "," + FoodTime.getText());
tPrinter.close();

JOptionPane.showMessageDialog(null, "Nutritional data has been saved.","Info",JOptionPane.INFORMATION_MESSAGE);


}
catch(Exception error) {
System.out.println("Error in saving nutritional data");
}
}


}


// Variables declaration - do not modify
private javax.swing.JTextField FoodName;
private javax.swing.JTextField FoodQuantity;
private javax.swing.JTextField FoodTime;
private javax.swing.JTextField HorseBreed;
private javax.swing.JTextField HorseDOB;
private javax.swing.JTextField HorseHandSize;
private javax.swing.JTextField HorseHeight;
private javax.swing.JTextField HorseID;
private javax.swing.JTextField HorseName;
private javax.swing.JToggleButton LoadButton;
private javax.swing.JComboBox<String> NutritionCB;
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel10;
private javax.swing.JLabel jLabel11;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JLabel jLabel9;
// End of variables declaration
}

最佳答案

在您的jButton1ActionPerformed(ActionEvent)方法中:

首先,改变

FileWriter tWriter = new FileWriter("HorseNutrition.txt");

OutputStreamWriter tWriter = new OutputStreamWriter(new FileOutputStream("HorseNutrition.txt"));

FileWriter 只是实现作为缩写,因此这里没有逻辑差异。事实上,FileWriter(String) 构造函数几乎执行了下面所述的操作。

然后使用 FileOutputStream(File, boolean) 构造函数。这里,传递的 boolean 值表示是否保留文件中已包含的数据,因此是否应附加给定的输入。

这会导致

OutputStreamWriter tWriter = new OutputStreamWriter(new FileOutputStream("HorseNutrition.txt", true));

关于java - 无法避免覆盖文本文件上的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42328898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com