如何将JTable的内容写入文本文件?

时间:2014-03-21 22:07:31

标签: java parsing jtable filewriter tablemodel

我一直致力于一个侧面项目,我有一个JTable,需要将其内容写入文本文件。它是JFrame的一部分,其中有一个"更新"按钮,用户应该单击以更新文本文件。但是,当我调用更新电子表格的方法时,它创建的所有内容都是空白文件。

以下是表格型号:

    spreadsheet.setModel(new javax.swing.table.DefaultTableModel(
        new Object [][] {
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false},
            {"", "0", false, false}
        },
        new String [] {
            "Descripton", "Amount", "Income?", "Expense?"
        }
    ) {
        Class[] types = new Class [] {
            java.lang.String.class, java.lang.Integer.class, java.lang.Boolean.class, java.lang.Boolean.class
        };

        public Class getColumnClass(int columnIndex) {
            return types [columnIndex];
        }
    });
    jScrollPane1.setViewportView(spreadsheet);

以下是将表格转换为文本文件的方法:

private void updtSSActionPerformed(java.awt.event.ActionEvent evt) {                                       
    try {
        StringBuffer fileContent = new StringBuffer();
        TableModel tModel = spreadsheet.getModel();
        for (int i = 0; i < tModel.getRowCount(); i++) {

            Object cellValue = tModel.getValueAt(i, 0);
            fileContent.append(cellValue);
        }

        FileWriter fileWriter = new FileWriter(new File("data.txt"));
        fileWriter.write(fileContent.toString());
        fileWriter.flush();
        fileWriter.close();
    } catch (IOException ex) {
        Logger.getLogger(Spreadsheet.class.getName()).log(Level.SEVERE, null, ex);
    }
}

(我从这里获得了上述方法:https://community.oracle.com/message/5235252

我该如何解决这个问题?我对Java仍然有些新意,因此非常感谢任何建议。

1 个答案:

答案 0 :(得分:1)

我认为问题可能是你只获得了表模型中第一列的值,而这似乎是空的String s。您需要遍历表模型中每一行的每一列,以创建例如然后您可以将StringStringBuffer写入您的文件。

您可以在表模型上调用getColumnCount()以获取列数,然后在已创建的for循环中,执行另一个循环,遍历每行的列,组合String您追加到StringBuffer fileContent的{​​{1}},或者您可能希望在每行后加StringBuffer

如果表格模型变大,您可能需要考虑动态写入文件,而不是使用\\n在内存中进行汇编。