Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将数据从JTable导出到CSV_Java_Jtable - Fatal编程技术网

Java 如何将数据从JTable导出到CSV

Java 如何将数据从JTable导出到CSV,java,jtable,Java,Jtable,我只是在开始编写一些代码从JTable中提取值时遇到了一些问题,这样我最终可以将它们作为CSV文件在Excel中查看。目前,我使用以下代码创建了一个JTable: package com.alpha; import javax.swing.*; import java.awt.*; public class JTableComponent{ public static void main(String[] args) { new JTableComponent(); }

我只是在开始编写一些代码从JTable中提取值时遇到了一些问题,这样我最终可以将它们作为CSV文件在Excel中查看。目前,我使用以下代码创建了一个JTable:

package com.alpha;

import javax.swing.*;
import java.awt.*;

public class JTableComponent{
  public static void main(String[] args) 
{
    new JTableComponent();
  }

  public JTableComponent(){
    JFrame frame = new JFrame("Whiteboard Test");
    JPanel panel = new JPanel();
    String data[][] = {{"Company A","1000","1"},{"Company B","2000","2"},
     {"Company C","3000","3"},{"Company D","4000","4"}};

      String col[] = {"Company Name","Shares","Price"};
    JTable table = new JTable(data,col);
    panel.add(table,BorderLayout.CENTER);

    frame.add(panel);
    frame.setSize(300,200);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
} 
我已经启动了一个新类,只要按下“导出到CSV”按钮,它就会被调用。我将在稍后的阶段实现按钮侦听器等,现在我想要一些关于如何创建for外观的指针,该外观将通过列和行查找其中包含的值。请注意,JTable是可伸缩的,当前的JTable只是用于测试目的。我知道有些API是可用的,比如ApacheOne,但是我不想使用它们

package com.alpha;

public class Exporter extends JTableComponent
{

 public changeToCSV(){

 }


 public changeToCSV()
 {
   for(int j = 0; j < table.getColumnCount(); j++) {
 }
}
package com.alpha;
公共类导出器扩展了JTableComponent
{
公共变更{
}
公共变更
{
对于(int j=0;j

我很难决定构造函数应该收到什么。非常感谢您的帮助!

导出器类方法定义无效。您需要包含返回类型才能编译此代码(我想这就是您提到构造函数应该返回什么时的意思)

对于一个简单的实现,您可以考虑返回一个字符串[]],然后在双嵌套循环中转换成CSV数据。在过去,我已经实现了一个类似于

的结构。
ExportAction
 |
 |--> ExportDestination
 |--> ExportFormatter
ExportAction
javax.swing.Action
的一个实现,与“导出到csv”按钮关联。它引用了两个类:

  • ExportDestination
    :csv数据的逻辑目标。此接口提供了一个方法createWriter(),该方法由创建“接收器”的操作调用
    ExportDestination
    的一个具体实现是FileDestination,但我也实现了其他一些,如
    ClipboardDestination
  • ExportFormatter
    :负责将表行转换为csv数据。我选择一次执行一行:
    ExportAction
    将迭代每行以导出调用
    ExportFormatter.writeTableRow
    ,并传入从导出目标创建的写入程序。这给了我f灵活决定要导出的行(例如,当前可见/当前选定/所有行)
因此,在回答您最初的问题时,我没有从各种导出方法中返回任何内容。相反,当调用该操作时,我会提示用户选择参数(例如文件名),然后在调用导出例程之前设置这些参数


希望对您有所帮助。

Exporter可以被制作成一个helper类。但是,由于您似乎想要导出任何JTable,所以您可以做的就是切换到实用方法

public class CSVExporterUtils{
    public static void exportToCSV( JTable tableToExport, String pathToExportTo ){
        // Pseudocode below
        /*
        Open file and test if valid path

        Loop through each table line
            Loop through each column
                Get value at line, column
                    Add value to StringBuilder plus a comma
            Write contents of StringBuilder to file
            And add return using System.getProperty("line.separator")
        End Loop

        Close file
        */
    }
}
然后可以按如下方式调用此方法:


<> >代码> CVSuxTurtuuts.ExpToSV(MyJTABLE,“C:/MyExuttDeave.CSV”);

> P>您可能想考虑使用TSV(Tab分隔值)作为逗号分隔值(CSV)的替代方案。格式,这通常会因为需要转义逗号而造成困难。下面是一个简单的java教程,它实现了JTable,然后使用TSV格式将其导出到MS Excel文件:

下面是导出的excel文件(手动调整列宽)


我在中使用了以下方法从JTable中提取数据作为csv,希望这对其他人有所帮助

public static boolean exportToCSV(JTable tableToExport,
        String pathToExportTo) {

    try {

        TableModel model = tableToExport.getModel();
        FileWriter csv = new FileWriter(new File(pathToExportTo));

        for (int i = 0; i < model.getColumnCount(); i++) {
            csv.write(model.getColumnName(i) + ",");
        }

        csv.write("\n");

        for (int i = 0; i < model.getRowCount(); i++) {
            for (int j = 0; j < model.getColumnCount(); j++) {
                csv.write(model.getValueAt(i, j).toString() + ",");
            }
            csv.write("\n");
        }

        csv.close();
        return true;
    } catch (IOException e) {
        e.printStackTrace();
    }
    return false;
}
公共静态布尔exportToCSV(JTable tableToExport,
字符串路径(导出到){
试一试{
TableModel model=tableToExport.getModel();
FileWriter csv=新FileWriter(新文件(路径导出到));
对于(int i=0;i
构造函数不能返回任何内容。没错,我的错误编程术语很糟糕。我应该说构造函数应该收到什么。要传递信息,可以通过构造函数进行初始化,如下所示:
公共导出器(JTable myJTable){this.myJTable=myJTable;}
谢谢,我知道我需要返回一个类型,我只是粘贴了我的Exporter类,让人们知道我想要实现什么。正如我所说,我真的很想得到一些关于如何继续For循环以及Exporter类将包含什么内容的建议/指针(因为字符串不正确).Hi James,如果您能够实现这个(CSVExporterUtils.java)类,它将非常有用,人们可以将它用作csv util。