1 package prefuse.data.io; 2 3 import java.io.BufferedOutputStream ; 4 import java.io.OutputStream ; 5 import java.io.PrintStream ; 6 7 import prefuse.data.Table; 8 import prefuse.util.collections.IntIterator; 9 10 17 public class CSVTableWriter extends AbstractTableWriter { 18 19 private boolean m_printHeader; 20 21 24 public CSVTableWriter() { 25 this(true); 26 } 27 28 32 public CSVTableWriter(boolean printHeader) { 33 m_printHeader = printHeader; 34 } 35 36 38 42 public boolean isPrintHeader() { 43 return m_printHeader; 44 } 45 46 50 public void setPrintHeader(boolean printHeader) { 51 m_printHeader = printHeader; 52 } 53 54 56 59 public void writeTable(Table table, OutputStream os) throws DataIOException { 60 try { 61 PrintStream out = new PrintStream (new BufferedOutputStream (os)); 63 64 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 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 str = table.getString(row, table.getColumnName(i)); 79 out.print(makeCSVSafe(str)); 80 } 81 out.println(); 82 } 83 84 out.flush(); 86 } catch ( Exception e ) { 87 throw new DataIOException(e); 88 } 89 } 90 91 private String makeCSVSafe(String 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 } | Popular Tags |