java - 如何将 JTable 数据导出到 CSV 文件

标签 java swing csv jtable export-to-csv

我正在寻找一种将包含数据的 JTable 导出到 .csv 文件的方法。但我没有找到一个好的方法来做到这一点。它可以工作并生成 csv 文件。但有一个问题。当jTable列中有这样的数据时,

|column 1|column 2|
-------------------
|Java, C#|PHP     |

结果是,

column 1,column2,
Java,C#,PHP,

因此问题 ID 只有2 列2 数据列,但对于 CSV 文件,有3 数据列。当将该 CSV 文件导入 Excel 工作表时,这是完全错误的。数据流向不同的位置。

那么在 Java 中是否有另一种方法可以做到这一点,或者有什么方法可以避免这个问题?

提前感谢您的帮助!谨致问候。

我使用以下代码。

public void ExportToCSVfile(JTable table) throws IOException, ClassNotFoundException
    {
            Writer writer = null;
            DefaultTableModel defaultTableModel = (DefaultTableModel) table.getModel();
            int Row = defaultTableModel.getRowCount();
            int Col = defaultTableModel.getColumnCount();
            try {
                writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("file.csv"), "utf-8"));

                StringBuffer bufferHeader = new StringBuffer();
                for (int j = 0; j < Col; j++) {
                    bufferHeader.append(defaultTableModel.getColumnName(j));
                    if (j!=Col) bufferHeader.append(", ");
                }
                writer.write(bufferHeader.toString() + "\r\n");

                for (int i = 0 ; i < Row ; i++){
                     StringBuffer buffer = new StringBuffer();
                    for (int j = 0 ; j < Col ; j++){
                        buffer.append(defaultTableModel.getValueAt(i,j));
                        if (j!=Col) buffer.append(", ");
                    }
                    writer.write(buffer.toString() + "\r\n");
                }
            } finally {
                  writer.close();
            }
        }

最佳答案

So is there another way to do this in Java or any way to avoid this problem?

我不知道 CSV 格式文件的所有规则,但我相信对于单元格包含“,”的简单内容,您只需分隔单元格的整个文本即可。

所以文件的输出应该是:

column 1,column2,
"Java,C#",PHP,

这很容易验证您只需创建一个简单的电子表格,其中单元格包含逗号,然后将电子表格导出到 .csv 文件并在文本编辑器中检查文件的格式。

我认为您可以用“...”分隔所有数据,即使它不包含逗号,但您需要验证这一点。

因此您需要修改导出代码以包含分隔符。

关于java - 如何将 JTable 数据导出到 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52728133/

相关文章:

java - 获取整数数组而不是字符数组

java - 提高 JTextField 的性能

mongodb - 使用 mongoimport 导入 CSV 文件是否可以导入 NULL?

csv - 如何从 compojure API 流式传输大型 CSV 响应,以便整个响应不会立即保存在内存中?

apache-spark - Pyspark - 如何将 Parquet 文件转换为带有分隔符的文本文件

java - ClassLoader不加载内部类

java - 使用 StringBuilder 将字符串的 ArrayList 连接成单个字符串

java - 如何将单词转换为数字?

java - 从(大)文本文件填充 JComboBox

java - Swing 中的外观和感觉