我有一个已经创建的JTable,我想在其中插入文本文件中的数据。我不想创建另一个新的JTable,而是将数据插入正确的行和列中。
我所有目的是在退出应用程序之前保存JTable数据,并在重新打开应用程序后保存数据。在退出之前,我设法将JTable数据导出到文本文件,但是当我从文本文件导入时,数据不会显示。
这是我导出到文本文件中的代码:
for循环中的if语句用于检查JTable字段是否为空。
public void serializeData() {
try {
BufferedWriter writer = new BufferedWriter(new FileWriter("C:\\Users\\X\\Documents\\NetBeansProjects\\JavaApplication1\\data.txt"));
for (int i = 1; i < dataTable.getRowCount(); i++) {
for (int j = 1; j < dataTable.getColumnCount(); j++) {
if (dataTable.getValueAt(i, j) != null) {
writer.write(dataTable.getValueAt(i, j).toString() + " ");
} else {
writer.write(0);
}
}
writer.write("\n");
}
writer.close();
System.out.printf("Serialized data is saved in /tmp/employee.ser");
} catch (IOException i) {
JOptionPane.showMessageDialog(null, "File not found");
}
}
这是我要从文本文件导入的代码:
在导入时,我只想导入文本文件中的数字,否则,我想将该字段设置为空。
String filepath = "C:\\Users\\X\\Documents\\NetBeansProjects\\JavaApplication1\\data.txt";
File file = new File(filepath);
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
DefaultTableModel tableModel = (DefaultTableModel) dataTable.getModel();
Object[] lines = reader.lines().toArray();
for(int i = 1; i<lines.length-1; i++) {
String[] row = lines[i].toString().split(" ");
for(int j = 1; j<row.length; j++) {
if(row[i].equals(" ")) {
dataTable.setValueAt(null, i, j);
} else {
dataTable.setValueAt(Double.parseDouble(row[j]), i, j);
}
}
}
} catch(Exception ex) {
JOptionPane.showMessageDialog(null, "Error");
}
当我尝试从文本文件导入数据时,JTable中什么也没有出现。 我该如何解决?
答案 0 :(得分:0)
if(row[i].equals(" ")) {
dataTable.setValueAt(null, i, j);
} else {
dataTable.setValueAt(Double.parseDouble(row[j]), i, j);
}
您的基本逻辑是错误的。如果要导入数据,则意味着您应该从“空”模型开始。因此,您需要在解析文件中的每一行时添加数据。
所以逻辑应该类似于:
if(row[i].equals(" ")) {
row[i] = null;
} else {
row[i] = Double.parseDouble(row[i]);
}
tableModel.addRow( row );
答案 1 :(得分:-2)
更新数据后,在表模型上调用fireTableStructureChanged。