繁体   English   中英

从文本文件导入数据到 JTable

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM