Чтение текстового файла с разделителями в JTable

Я прошел этот учебник, чтобы узнать, как использовать Netbeans для создания приложения с графическим интерфейсом для вводить информацию в форму, иметь возможность редактировать ее и сохранять в 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: Сначала не работало, но я понял. Я не добавлял "\n" при записи файла. Я обновил свой код, а также добавил код для очистки Jtable при открытии нового файла. Дайте мне знать, если есть что-то, что не является «хорошей практикой».

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#

person john8791    schedule 15.06.2016    source источник
comment
не добавлял \n при записи файла См. BufferedWriter.newLine() для более надежного подхода.   -  person Andrew Thompson    schedule 15.06.2016
comment
Не могли бы вы поделиться, как выглядит ваш текстовый файл?   -  person Sanjeev Saha    schedule 15.06.2016
comment
@Sanjeev Saha: я отредактировал свой OP, включив в него список тестовых текстовых файлов.   -  person john8791    schedule 15.06.2016
comment
Итак, @john8791 вам удалось отобразить текстовый файл в JTable?   -  person Sanjeev Saha    schedule 15.06.2016
comment
@Sanjeev Saha: Да, теперь все работает.   -  person john8791    schedule 15.06.2016
comment
Ницца! На самом деле я подумал о решении установить новую модель в JTable каждый раз, когда вы читаете новый файл, вместо добавления и удаления строки из существующей модели.   -  person Sanjeev Saha    schedule 15.06.2016


Ответы (1)


  1. Создайте пустую модель DefaultTableModel с именами столбцов.
  2. Затем вы можете использовать метод String.split(...) для разделения каждой строки данных.
  3. Затем вы можете использовать метод addRow(...) модели DefaultTableModel, чтобы добавить данные в модель.
  4. Затем вы можете создать свой JTable с помощью DefaultTableModel.
person camickr    schedule 15.06.2016