将分隔的txt文件读入JTable

时间:2016-06-15 00:38:09

标签: java string swing jtable delimited-text

我通过这个tutorial来学习如何使用Netbeans创建一个GUI应用程序来获取表单上的信息,能够编辑它,并将其保存到JTable中。我现在想扩展我学到的能够将这个JTable写入分隔的文本文件并在以后读取它以添加更多数据。我已成功将数据写入文件。它的代码在这里,并通过我创建的菜单事件执行:

private void mnuSaveActionPerformed(java.awt.event.ActionEvent evt) {                                        
    int returnVal = fileChooser.showSaveDialog(this);
    if (returnVal == JFileChooser.APPROVE_OPTION) {
        File file = fileChooser.getSelectedFile();

        try {

            FileWriter fw = new FileWriter(file.getAbsoluteFile());
            BufferedWriter bw = new BufferedWriter(fw);

            for (int i = 0; i < tblProduct.getRowCount(); i++) {
                for (int j = 0; j < tblProduct.getColumnCount(); j++) {
                    bw.write((String) tblProduct.getModel().getValueAt(i, j) + "#");
                }
                bw.newLine();
            }
            bw.close();
            fw.close();

        } catch (IOException ex) {
            System.out.println("problem accessing file" + file.getAbsolutePath());
        }
    } else {
        System.out.println("File access cancelled by user.");
    }
}

我已经阅读过许多关于StringTokenizer之类的帖子,但我似乎无法理解采取什么方法。任何方向都会受到赞赏。

更新

@camickr:起初没有工作,但我明白了。我没有添加&#34; \ n&#34;在写文件时。我更新了我的代码,并在打开新文件时添加了代码来清除我的Jtable。让我知道是否有任何不是&#34;良好做法&#34;。

private void mnuOpenActionPerformed(java.awt.event.ActionEvent evt) {                                        
    String line;
    DefaultTableModel model = (DefaultTableModel) tblProduct.getModel();

    for (int i = tblProduct.getRowCount() - 1; i >= 0; i--) {
        model.removeRow(i);
    }

    int returnVal = fileChooser.showOpenDialog(this);
    if (returnVal == JFileChooser.APPROVE_OPTION) {
        File file = fileChooser.getSelectedFile();
        try {
            FileReader fr = new FileReader(file.getAbsoluteFile());
            BufferedReader br = new BufferedReader(fr);

            while ((line = br.readLine()) != null) {
                model.addRow(line.split("#"));
            }

            br.close();
            fr.close();

        } catch (IOException ex) {
            System.out.println("problem accessing file" + file.getAbsolutePath());
        }
    } else {
        System.out.println("File access cancelled by user.");
    }
}                                    

以下是我的测试文本文件生成的内容:

Test1#Electronic#23.50#
Test2#Art#100.00#
Test3#Food#25.00#
Test4#Electronic#10.00#
Test5#Art#1.00#
Test6#Electricity#3.00#
Test7#Food#5.00#
Test8#Food#7.00#
Test9#Electronic#9.00#

1 个答案:

答案 0 :(得分:2)

  1. 使用列名创建一个空的DefaultTableModel。
  2. 然后,您可以使用String.split(...)方法分割每行数据。
  3. 然后,您可以使用DefaultTableModel的addRow(...)方法将数据添加到模型中。
  4. 然后可以使用DefaultTableModel创建您的JTable。