# Export von jTable in CSV Datei



## holtiwilan (27. April 2005)

Hallo.
Ich habe gerade ein blockade.
Ich will eine jTable die mit einer SQL Abfrage gefüttert ist in eine CSV Datei Exportieren.

JFreeReport habe ich runtergeladen, sit mir aber nicht gegeben, das zu benutzen.

Wenn ir jemand einen Tip geben kann wäre ich sehr Dankbar. JFreeReport beispiele wäre nicht schlecht, weil der ja auch in PDF, Excel, XML und so kann.

Hat de vielleicht jemand Erfahrung?

Danke und viele Grüsse aus Freiburg

Tim


----------



## Thomas Darimont (27. April 2005)

Hallo!

hier mal ein kleines Beispiel dazu:

```
/**
 * 
 */
package de.tutorials;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableModel;

/**
 * @author Tom
 * 
 */
public class JTableExample extends JFrame {

	private JTable table;

	private JButton btnExport;

	private boolean exportInProgress;

	public JTableExample() {
		super("JTableExample");
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		Object[][] rowData = { { "1", "a", "c" }, { "2", "b", "b" },
				{ "3", "f", "r" }, { "4", "q", "a" }, { "5", "w", "z" },
				{ "6", "c", "a" }, { "7", "a", "q" } };

		final Object[] columnHeaders = { "ID", "Header1", "Header2" };

		table = new JTable(rowData, columnHeaders);

		add(new JScrollPane(table), BorderLayout.CENTER);

		btnExport = new JButton("Export to CSV");
		btnExport.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (!exportInProgress) {
					exportInProgress = true;
					new Thread() {
						public void run() {
							exportTableDataToCSV(table,
									new File("c:/foooo.csv"));
							exportInProgress = false;
						}
					}.start();
				}
			}
		});

		add(btnExport, BorderLayout.SOUTH);

		pack();
		setVisible(true);
	}

	public void exportTableDataToCSV(JTable table, File file) {
		try {
			file.createNewFile();

			BufferedWriter bw = new BufferedWriter(new FileWriter(file));

			TableModel model = table.getModel();
			for (int clmCnt = model.getColumnCount(), rowCnt = model
					.getRowCount(), i = 0; i < rowCnt; i++) {
				for (int j = 0; j < clmCnt; j++) {
					String value = model.getValueAt(i, j).toString();
					bw.write(value);
					bw.write(";");
				}
				bw.newLine();
			}

			bw.flush();
			bw.close();

		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new JTableExample();
	}
}
```

Gruß Tom


----------



## holtiwilan (28. April 2005)

Supi.
Nach ein paar Änderungen, war es für mich perfect.
Hier der Code nach den Änderungen: 
- Spaltennamen mit ausgeben 
- ";" nur als trenner, nicht am Zeilenende
- NULL Werte in der Tabelle abfangen.


```
public static void exportTableDataToCVS(JTable table, File file) {
                try {
                        file.createNewFile();

                        BufferedWriter bw = new BufferedWriter(new FileWriter(file));

                        TableModel model = table.getModel();
                        for (int h = 0 ; h < model.getColumnCount();h++){
                          bw.write(model.getColumnName(h).toString());
                          if (h+1 != model.getColumnCount())
                            bw.write(";");
                        }
                        bw.newLine();
                        
                        for (int clmCnt = model.getColumnCount(), rowCnt = model
                                        .getRowCount(), i = 0; i < rowCnt; i++) {
                                for (int j = 0; j < clmCnt; j++) {
                                        if (model.getValueAt(i, j) != null){
                                          String value = model.getValueAt(i, j).toString();
                                          bw.write(value);
                                        }
                                        if(j+1 != clmCnt)
                                          bw.write(";");
                                }
                                bw.newLine();
                        }

                        bw.flush();
                        bw.close();

                } catch (IOException e) {
                        e.printStackTrace();
                }
        }
```


----------

