Java 如何将JTable数据导出到CSV文件中

Java 如何将JTable数据导出到CSV文件中,java,swing,csv,jtable,export-to-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工作表时,它是完全错误的。数据被转移到不同的

我正在寻找一种方法,将带有数据的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();
            }
        }
public void ExportToCSVfile(JTable表)抛出IOException、ClassNotFoundException
{
Writer=null;
DefaultTableModel DefaultTableModel=(DefaultTableModel)table.getModel();
int Row=defaultTableModel.getRowCount();
int Col=defaultTableModel.getColumnCount();
试一试{
writer=newbufferedwriter(newoutputstreamwriter(newfileoutputstream(“file.csv”),“utf-8”);
StringBufferBufferHeader=新的StringBuffer();
对于(int j=0;j
那么,在Java中有没有其他方法来解决这个问题,或者有没有其他方法来避免这个问题呢

我不知道CSV格式文件的所有规则,但我相信对于一个单元格包含“,”的简单情况,您只需划界单元格的整个文本即可

因此,文件的输出应该是:

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

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


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

不要使用您自己的角色,使用适当的-要求比在两者之间粘贴一个
更复杂values@HasithaMJayawardana,我们不是来为您编写代码的。关于这个建议,你有什么不明白的?作为一个具体问题,如果建议不明确。您正在使用StringBuffer。您所需要做的就是在从表格模型中获得的值之前和之后,在黄油上加上一个双引号。@HasithaMJayawardana,很高兴这个建议对您有所帮助。别忘了“接受”答案,这样人们就知道问题已经解决了。我尝试将其导出为Excel文件,而不是CSV。我认为这也会起作用。但我没有试过这个。谢谢你的回答。@HasithaMJayawardana
但我没有试过这个。
-为什么不?这是你最初发布的两行额外的代码。