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中的保存函数创建新列而不是覆盖的主要内容,如果未能解决你的问题,请参考以下文章
是否有可能有一个继承最终函数但创建相同函数(而不是覆盖)的派生类?
JAVA-初步认识-第八章-继承-子父类中成员函数特点-覆盖