KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > hsqldb > util > CSVWriter


1 /* Copyright (c) 2001-2005, The HSQL Development Group
2  * All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *
7  * Redistributions of source code must retain the above copyright notice, this
8  * list of conditions and the following disclaimer.
9  *
10  * Redistributions in binary form must reproduce the above copyright notice,
11  * this list of conditions and the following disclaimer in the documentation
12  * and/or other materials provided with the distribution.
13  *
14  * Neither the name of the HSQL Development Group nor the names of its
15  * contributors may be used to endorse or promote products derived from this
16  * software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21  * ARE DISCLAIMED. IN NO EVENT SHALL HSQL DEVELOPMENT GROUP, HSQLDB.ORG,
22  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
26  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */

30
31
32 package org.hsqldb.util;
33
34 import java.io.File JavaDoc;
35 import java.io.FileOutputStream JavaDoc;
36 import java.io.IOException JavaDoc;
37 import java.io.OutputStreamWriter JavaDoc;
38
39 /**
40  * helper class to write table data to a csv-file (comma separated values).
41  * the first line in file is a list of fieldnames, all following lines
42  * are data lines.
43  * a descptiontion of file format can be found on: http://www.wotsit.org/
44  * usage: create a object using the constructor. call writeHeader
45  * for writing the filename header then add data with writeData.
46  * at the end close() closes the file.
47  *
48  *@author jeberle@users
49  */

50 public class CSVWriter {
51
52     private String JavaDoc newline = System.getProperty("line.separator");
53     private OutputStreamWriter JavaDoc writer = null;
54     private int nbrCols = 0;
55     private int nbrRows = 0;
56
57     /**
58      * constructor.
59      * creates a csv file for writing data to it
60      * @param file the file to write data to
61      * @param encoding encoding to use or null (=defualt)
62      */

63     public CSVWriter(File JavaDoc file, String JavaDoc encoding) throws IOException JavaDoc {
64
65         if (encoding == null) {
66             encoding = System.getProperty("file.encoding");
67         }
68
69         FileOutputStream JavaDoc fout = new FileOutputStream JavaDoc(file);
70
71         writer = new OutputStreamWriter JavaDoc(fout, encoding);
72     }
73
74     /**
75      * writes the csv header (fieldnames). should be called after
76      * construction one time.
77      * @param header String[] with fieldnames
78      */

79     public void writeHeader(String JavaDoc[] header) throws IOException JavaDoc {
80
81         this.nbrCols = header.length;
82
83         doWriteData(header);
84     }
85
86     /**
87      * writes a data-record to the file. note that data[] must have
88      * same number of elements as the header had.
89      *
90      * @param data data to write to csv-file
91      */

92     public void writeData(String JavaDoc[] data) throws IOException JavaDoc {
93         doWriteData(data);
94     }
95
96     /**
97      * closes the csv file.
98      */

99     public void close() throws IOException JavaDoc {
100         this.writer.close();
101     }
102
103     private void doWriteData(String JavaDoc[] values) throws IOException JavaDoc {
104
105         for (int i = 0; i < values.length; i++) {
106             if (i > 0) {
107                 this.writer.write(";");
108             }
109
110             if (values[i] != null) {
111                 this.writer.write("\"");
112                 this.writer.write(this.toCsvValue(values[i]));
113                 this.writer.write("\"");
114             }
115         }
116
117         this.writer.write(newline);
118
119         this.nbrRows++;
120     }
121
122     private String JavaDoc toCsvValue(String JavaDoc str) {
123
124         StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
125
126         for (int i = 0; i < str.length(); i++) {
127             char c = str.charAt(i);
128
129             sb.append(c);
130
131             switch (c) {
132
133                 case '"' :
134                     sb.append('"');
135                     break;
136             }
137         }
138
139         return sb.toString();
140     }
141 }
142
Popular Tags