无法覆盖文本文件

时间:2017-02-19 15:14:19

标签: java

我几天前发布了关于我所在学校的项目的信息,我得到了一些非常有用的帮助,这些帮助让我可以进一步完善我的项目。尽管如此,还出现了其他一些问题。在我正在做的这个项目中,我打算输入不同的培训方法"对于马。这是用户在程序中输入的,意味着将该训练方法写入文本文件。这很好用,但是我想说我想为另一匹马输入另一种训练方法。这将发生,但第一匹马的输入将被完全删除,只有写入文本文件的最后一件事将保留。有谁知道为什么会这样,我可以做些什么来修复它?谢谢! (对不起,长码我只是合法地不知道哪个部分可能弄乱了我的程序)

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                   
}

1 个答案:

答案 0 :(得分:1)

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));
相关问题