将jTable数据导出到文本文件并以不正确的顺序导入回数据时

塔林杜德

导入具有现有数据的数据JTable之后的文本文件我尝试将JTable数据导出到文本文件并将数据导入回同一JTable。但是,如图所示,文本文件和JTable中的数据顺序不正确。表中的某些单元格用两个或多个单词填充。帮我解决这个问题是高度赞赏的吗?提前致谢。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

public class SaveTest1 extends javax.swing.JFrame{
    
    public SaveTest1() {
        initComponents();
        setLocationRelativeTo(null);
    }
    
    @SuppressWarnings("unchecked")                     
    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;

        jFileChooser1 = new javax.swing.JFileChooser();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();
        jButton1 = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(new java.awt.GridBagLayout());

        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {"1", "Engineering Brick", "Nos", "18.00", "550", "9900.00"},
                {"2", "River Sand", "Cube", "15000.00", "0.1", "1500.00"},
                {"3", "Cement", "cwt", "1100.00", "3", "3300.00"},
                {null, null, null, null, "Cost of Material", "14700.00"}
            },
            new String [] {
                "ID", "Name", "Unit", "Price", "Qty", "Amount"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
            };

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

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.gridwidth = 2;
        gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
        gridBagConstraints.weightx = 0.1;
        gridBagConstraints.weighty = 0.1;
        gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
        getContentPane().add(jScrollPane1, gridBagConstraints);

        jButton1.setText("Export");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.weightx = 0.1;
        gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
        getContentPane().add(jButton1, gridBagConstraints);

        jButton2.setText("Import");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.weightx = 0.1;
        gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5);
        getContentPane().add(jButton2, gridBagConstraints);

        pack();
    }                       

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
       JFileChooser fileChooser = new JFileChooser();
        fileChooser.setDialogTitle("Save as");
       
        int userSelection = fileChooser.showSaveDialog(this);

        if (userSelection == JFileChooser.APPROVE_OPTION) {
            File fileToSave = fileChooser.getSelectedFile();

            try {
                FileWriter fw = new FileWriter(fileToSave);
                BufferedWriter bw = new BufferedWriter(fw);

                for (int i = 0; i < jTable1.getColumnCount(); i++) {
                    
                    bw.write(jTable1.getColumnName(i));
                    bw.write("\t");

                }
                for (int i = 0; i < jTable1.getRowCount(); i++) {
                    bw.newLine();
                    for (int j = 0; j < jTable1.getColumnCount(); j++) {
                        bw.write((String) jTable1.getValueAt(i,j));
                        String val = (String) jTable1.getValueAt(i, j);
                        if (val == null) {
                        val = "";
                        }
                        bw.write("\t");
                    }
                }
                JOptionPane.showMessageDialog(this, "File Saved", "Information", JOptionPane.INFORMATION_MESSAGE);
                
                bw.close();
                fw.close();
                
            } catch (IOException ex) {
                JOptionPane.showMessageDialog(this, "Error", "Error Message", JOptionPane.ERROR_MESSAGE);
            }
        }
    }                                        

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        JFileChooser fileChooser = new JFileChooser();
        fileChooser.setDialogTitle("Open");
       
        int userSelection = fileChooser.showOpenDialog(this);
        if (userSelection == JFileChooser.APPROVE_OPTION) {
            File fileToOpen = fileChooser.getSelectedFile();
            
            try {
            FileReader fr = new FileReader(fileToOpen);
            BufferedReader br = new BufferedReader(fr);

            DefaultTableModel model1 = (DefaultTableModel) jTable1.getModel();
            Object[] lines = br.lines().toArray();

            for (int i = 1; i < lines.length; i++) {

                String[] row = lines[i].toString().split(" ");
                model1.addRow(row);
            }

        } catch (Exception ex) {
            Logger.getLogger(SaveTest1.class.getName()).log(Level.SEVERE, null, ex);
        }
        }
    }                                        

    private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {                                         
       DefaultTableModel model1 = (DefaultTableModel) jTable1.getModel();
        model1.setRowCount(0);
    }       
    
    
    public static void main(String args[]) {
       
        
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(SaveText.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(SaveText.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(SaveText.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(SaveText.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new SaveText().setVisible(true);
            }
        });
    }

                    
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JFileChooser jFileChooser1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
                   
}
不知道太多但是变得更好

写入文件时,用制表符char分隔单元格bw.write("\t");,但是当读回数据时,则使用空格String[] row = lines[i].toString().split(" ");来标识每个单元格的边框。不要这样 在写入和回读时,请使用相同的char或String分隔单元格。

考虑

String[] row = lines[i].split("\t", -1);

代替

另外,最好将Stream转换为特定于String的数组,而不是Object数组:

String[] lines = br.lines().toArray(String[]::new);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Findstr将数据导出到文本文件

来自分类Dev

将数据从 Excel 导出到文本文件

来自分类Dev

在文本文件中标识日期,而日期格式不正确且数据种类繁多

来自分类Dev

将实时数据从MetaTrader 4导出到文本文件

来自分类Dev

如何将数据从Access导出到文本文件

来自分类Dev

将数据从MySQL导出到所需格式的文本文件

来自分类Dev

将数据导出到具有固定长度记录的文本文件

来自分类Dev

导出到CSV文件时,SQL小型报告以不正确的顺序显示列

来自分类Dev

导入CSV并导出到文本文件

来自分类Dev

将数据从SQL Server导出到C#中的文本文件(保存到特定文件夹)

来自分类Dev

Python:将文本列表导出到文本文件

来自分类Dev

我想使用PowerShell同时将脚本的数据导出到2个文本文件中

来自分类Dev

使用javascript将数据从文本文件导入数组

来自分类Dev

将数据从文本文件导入sql表

来自分类Dev

C ++将数据从文本文件导入int Vector

来自分类Dev

上传的文本文件编码不正确

来自分类Dev

使用 vba 将文本文件导入到 excel 时丢失数字数据

来自分类Dev

将Hadoop输出导出到文本文件

来自分类Dev

以这种格式将字典导出到文本文件

来自分类Dev

将Json对象导出到文本文件

来自分类Dev

将scrapy导出到文本文件

来自分类Dev

将多个存储过程导出到文本文件

来自分类Dev

将规则从Outlook导出到文本文件

来自分类Dev

将字典导出到文本文件

来自分类Dev

将Hadoop输出导出到文本文件

来自分类Dev

以这种格式将字典导出到文本文件

来自分类Dev

将局部视图导出到文本文件

来自分类Dev

在SSIS中将“数据流任务”任务结果导出到“文本文件”

来自分类Dev

使用foreach函数时,将拟合函数的摘要导出到文本文件

Related 相关文章

  1. 1

    Findstr将数据导出到文本文件

  2. 2

    将数据从 Excel 导出到文本文件

  3. 3

    在文本文件中标识日期,而日期格式不正确且数据种类繁多

  4. 4

    将实时数据从MetaTrader 4导出到文本文件

  5. 5

    如何将数据从Access导出到文本文件

  6. 6

    将数据从MySQL导出到所需格式的文本文件

  7. 7

    将数据导出到具有固定长度记录的文本文件

  8. 8

    导出到CSV文件时,SQL小型报告以不正确的顺序显示列

  9. 9

    导入CSV并导出到文本文件

  10. 10

    将数据从SQL Server导出到C#中的文本文件(保存到特定文件夹)

  11. 11

    Python:将文本列表导出到文本文件

  12. 12

    我想使用PowerShell同时将脚本的数据导出到2个文本文件中

  13. 13

    使用javascript将数据从文本文件导入数组

  14. 14

    将数据从文本文件导入sql表

  15. 15

    C ++将数据从文本文件导入int Vector

  16. 16

    上传的文本文件编码不正确

  17. 17

    使用 vba 将文本文件导入到 excel 时丢失数字数据

  18. 18

    将Hadoop输出导出到文本文件

  19. 19

    以这种格式将字典导出到文本文件

  20. 20

    将Json对象导出到文本文件

  21. 21

    将scrapy导出到文本文件

  22. 22

    将多个存储过程导出到文本文件

  23. 23

    将规则从Outlook导出到文本文件

  24. 24

    将字典导出到文本文件

  25. 25

    将Hadoop输出导出到文本文件

  26. 26

    以这种格式将字典导出到文本文件

  27. 27

    将局部视图导出到文本文件

  28. 28

    在SSIS中将“数据流任务”任务结果导出到“文本文件”

  29. 29

    使用foreach函数时,将拟合函数的摘要导出到文本文件

热门标签

归档