[英]Import data into JTable from text file
我已经创建了一个 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 中没有显示任何内容。 我怎么能解决这个问题?
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 );
更新数据后,在表模型上调用 fireTableStructureChanged。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.