2017-02-19 4 views
0

Я отправил пару дней назад о проекте моей школы, который я делал, и получил очень полезную помощь, которая позволила мне продолжить мой проект. Несмотря на это, что-то еще возникло. В этой программе, которую я делаю, я собираюсь ввести разные «методы обучения» для лошадей. Это вводится пользователем в программе и предназначено для записи этого метода обучения в текстовый файл. Это прекрасно работает, однако, допустим, я хочу ввести другой метод обучения для другой лошади. Это произойдет, но вход от первой лошади будет полностью удален, и останется только последнее, что было записано в текстовый файл. Кто-нибудь знает, почему это может быть и какие шаги я могу сделать, чтобы исправить это? Спасибо! (Извините за длинный код, который я только законно не знаю, какая часть его является то, что можно было бы испортить мою программу)Невозможно переписать все в текстовом файле

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     
} 
+0

Посмотрите в «добавление» или добавление в конец файла. Также вы вряд ли получите ответ, разместив столько кода, возможно, разместите только код, который записывается в файл. –

ответ

1

В вашем jButton1ActionPerformed(ActionEvent) метод:

Во-первых, изменить

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

в

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

FileWriter просто реализуется в качестве abbrevia так что здесь нет логической разницы. Фактически, конструктор FileWriter(String) делает в значительной степени то, что указано ниже.

Затем используйте конструктор FileOutputStream(File, boolean). Здесь пройденный boolean обозначает, остаются ли данные, уже содержащиеся в файле, поэтому, если данный ввод должен быть добавлен.

Это приводит к

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

Обратите внимание, что это будет работать, только если вы хотите читать или добавлять лошадей. Если вы хотите изменить данные, это не поможет. – Kayaman

+0

@ Kayaman Вы совершенно правы. Однако ОП заявил: «Я хочу ввести другой метод обучения для другой лошади», поэтому я думаю, что все в порядке. – Izruo

+0

Я просто добавил это как предостережение, так как вполне вероятно, что функции редактирования лошадей могут появиться тоже. – Kayaman

Смежные вопросы