java中的保存函数创建新列而不是覆盖

Posted

技术标签:

【中文标题】java中的保存函数创建新列而不是覆盖【英文标题】:Saving function in java creating new column instead of overriding 【发布时间】:2016-05-05 14:09:21 【问题描述】:

所以我正在用 Java 编写一个程序,它允许我创建团队(也可以删除它们并编辑它们)。

创建团队后,该程序允许用户添加 10 名球员,定义他们的体重和尝试得分,然后再次删除和编辑他们。现在,一旦他们达到 10 名玩家,他们就失去了添加更多玩家的能力,并且启用了保存按钮。

我遇到的问题是:如果我保存了一个团队,然后对其进行编辑或删除,然后我尝试再次保存它,表格会创建另一列并将所有值向右移动一列。这些图像将更好地说明我的意思。

第一次保存时:

第二次保存后:

保存功能代码如下:

private void btn_SaveTeamActionPerformed(java.awt.event.ActionEvent evt)                                              
  DefaultTableModel pattern  = (DefaultTableModel) table_PlayerBoard.getModel();

  try 
        saveTable((String) table_LeaderBoard.getValueAt(table_LeaderBoard.getRowCount() - 1, 0));
   catch (Exception ex) 
        Logger.getLogger(Mainpage.class.getName()).log(Level.SEVERE, null, ex);
  

  enableTeamEdit();
  btn_SaveTeam.setEnabled(false);
  JOptionPane.showMessageDialog(null, "Team Saved");

  pattern.setRowCount(0);
  btn_RankTeams.setEnabled(true);
  counter = 0;
                                            

ArrayList <Integer> triesList = new ArrayList();
ArrayList <String> teamList = new ArrayList();
boolean check = false;

我真的不明白错误在哪里。如果需要更多信息,请告诉我。提前致谢。

saveTable 方法:

public void saveTable(String fileName)throws Exception  
    DefaultTableModel chart  = (DefaultTableModel) table_PlayerBoard.getModel();  
    BufferedWriter bfw = new BufferedWriter(new FileWriter("C:\\Users\\" + System.getProperty("user.name") + "\\Desktop\\Sports\\" + fileName + ".txt")); 
    System.out.println(fileName);

    for (int i = 0 ; i < chart.getRowCount(); i++)
    
        for(int j = 0 ; j < chart.getColumnCount();j++)
        
            bfw.write((chart.getValueAt(i,j).toString()));
            bfw.write("\t");;
        
        bfw.newLine();
    
    bfw.close();

【问题讨论】:

请分享saveTable方法。 @rdonuk 刚刚编辑,因此 saveTable 可用 所以你希望保存文件的内容被新团队完全覆盖? @Jonah Haney 我希望保存文件的内容被用户对球员所做的任何更改完全覆盖,无论是对尝试、姓名、重量还是球队名称。目前我可以更新它们,但是一旦我保存它就会发生(第二张图片)。创建似乎是一个新列,并将尝试权重和权重的值移动到创建的新列 【参考方案1】:

在您的saveTable(...) 方法中,只需删除给定文件的内容,然后像这样打开一个新文件:

 String path = "C:\\Users\\" + System.getProperty("user.name") + "\\Desktop\\Sports\\" + fileName + ".txt";
 File file = new File(path);
 file.delete();
 file = new File(path);

 BufferedWriter bfw = new BufferedWriter(new FileWriter(file));

【讨论】:

可能是一个愚蠢的问题,因为我是 java 新手,但是当你的意思是删除你引用 for 语句或 BufferedWriter 之后的实际目录的内容时?谢谢 不想痛苦我已经在 saveTable 方法中尝试过这段代码,但是一旦我按下保存按钮,尝试列和体重列就会向右移动,就像在创建一个虚拟列。有什么想法吗?

以上是关于java中的保存函数创建新列而不是覆盖的主要内容,如果未能解决你的问题,请参考以下文章

将 BigQuery 嵌套字段内容展平为新列而不是行

Java保存功能不会覆盖

是否有可能有一个继承最终函数但创建相同函数(而不是覆盖)的派生类?

JAVA-初步认识-第八章-继承-子父类中成员函数特点-覆盖

如何从SharedPreferences文件中正确地将文本附加到TextView而不是覆盖它?

Django - 覆盖模型保存()