KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > prefuse > data > io > CSVTableWriter


1 package prefuse.data.io;
2
3 import java.io.BufferedOutputStream JavaDoc;
4 import java.io.OutputStream JavaDoc;
5 import java.io.PrintStream JavaDoc;
6
7 import prefuse.data.Table;
8 import prefuse.util.collections.IntIterator;
9
10 /**
11  * TableWriter that writes out a text table in the comma-separated-values
12  * format. By default, a header row containing the column names is included
13  * in the output.
14  *
15  * @author <a HREF="http://jheer.org">jeffrey heer</a>
16  */

17 public class CSVTableWriter extends AbstractTableWriter {
18
19     private boolean m_printHeader;
20     
21     /**
22      * Create a new CSVTableWriter that writes comma separated values files.
23      */

24     public CSVTableWriter() {
25         this(true);
26     }
27     
28     /**
29      * Create a new CSVTableWriter.
30      * @param printHeader indicates if a header row should be printed
31      */

32     public CSVTableWriter(boolean printHeader) {
33         m_printHeader = printHeader;
34     }
35
36     // ------------------------------------------------------------------------
37

38     /**
39      * Indicates if this writer will write a header row with the column names.
40      * @return true if a header row will be printed, false otherwise
41      */

42     public boolean isPrintHeader() {
43         return m_printHeader;
44     }
45
46     /**
47      * Sets if this writer will write a header row with the column names.
48      * @param printHeader true to print a header row, false otherwise
49      */

50     public void setPrintHeader(boolean printHeader) {
51         m_printHeader = printHeader;
52     }
53     
54     // ------------------------------------------------------------------------
55

56     /**
57      * @see prefuse.data.io.TableWriter#writeTable(prefuse.data.Table, java.io.OutputStream)
58      */

59     public void writeTable(Table table, OutputStream JavaDoc os) throws DataIOException {
60         try {
61             // get print stream
62
PrintStream JavaDoc out = new PrintStream JavaDoc(new BufferedOutputStream JavaDoc(os));
63             
64             // write out header row
65
if ( m_printHeader ) {
66                 for ( int i=0; i<table.getColumnCount(); ++i ) {
67                     if ( i>0 ) out.print(',');
68                     out.print(makeCSVSafe(table.getColumnName(i)));
69                 }
70                 out.println();
71             }
72             
73             // write out data
74
for ( IntIterator rows = table.rows(); rows.hasNext(); ) {
75                 int row = rows.nextInt();
76                 for ( int i=0; i<table.getColumnCount(); ++i ) {
77                     if ( i>0 ) out.print(',');
78                     String JavaDoc str = table.getString(row, table.getColumnName(i));
79                     out.print(makeCSVSafe(str));
80                 }
81                 out.println();
82             }
83             
84             // finish up
85
out.flush();
86         } catch ( Exception JavaDoc e ) {
87             throw new DataIOException(e);
88         }
89     }
90     
91     private String JavaDoc makeCSVSafe(String JavaDoc s) {
92         int q = -1;
93         if ( (q=s.indexOf('\"')) >= 0 ||
94              s.indexOf(',') >= 0 || s.indexOf('\n') >= 0 ||
95              Character.isWhitespace(s.charAt(0)) ||
96              Character.isWhitespace(s.charAt(s.length()-1)) )
97         {
98             if ( q >= 0 ) s = s.replaceAll("\"", "\"\"");
99             s = "\""+s+"\"";
100         }
101         return s;
102     }
103
104 } // end of class CSVTableWriter
105
Popular Tags