1 /*
2 * Copyright (c) 2004 International Decision Systems, Inc. All Rights Reserved.
3 *
4 * By using this Software, You acknowledge that the Software is a valuable asset
5 * and trade secret of either International Decision Systems, Inc. ("IDSI") or a
6 * third party supplier of IDSI and constitutes confidential and proprietary
7 * information.
8 *
9 * NEITHER IDSI NOR ANY AGENT OR PERSON ACTING FOR OR WITH IDSI HAS MADE OR DOES
10 * MAKE ANY STATEMENTS, AFFIRMATIONS, REPRESENTATIONS OR WARRANTIES WHATSOEVER
11 * TO YOU, WHETHER EXPRESS OR IMPLIED, AS TO THE SOFTWARE, THE QUALITY OR
12 * CONDITION OF THE SOFTWARE, OR THE OPERATING CHARACTERISTICS OR RELIABILITY OF
13 * THE SOFTWARE, OR ITS SUITABILITY FOR ANY GENERAL OR PARTICULAR PURPOSE, OR AS
14 * TO ANY OTHER MATTER WHATSOEVER; ANY AND ALL OTHER WARRANTIES INCLUDING
15 * WITHOUT LIMITATION ANY WARRANTIES IMPLIED BY LAW, SUCH AS THE IMPLIED
16 * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND TITLE,
17 * USE AND NON-INFRINGEMENT; ARE HEREBY EXPRESSLY DISCLAIMED AND EXCLUDED.
18 */
19 package net.sourceforge.addam.impexp.csv;
20
21 import java.io.IOException;
22 import java.io.Writer;
23
24 /**
25 * Writes CSV files according to the rules outlined on
26 * <a href="http://www.creativyst.com/Doc/Articles/CSV/CSV01.htm#FileFormat">Creativyst</a>
27 *
28 * @author TIM3
29 * @since Jul 30, 2004
30 */
31 public class CSVPrinter {
32 private final Writer out;
33 private final boolean alwaysQuote;
34
35 public CSVPrinter(Writer out) {
36 this(out, false);
37 }
38
39 public CSVPrinter(Writer out, boolean alwaysQuote) {
40 this.out = out;
41 this.alwaysQuote = alwaysQuote;
42 }
43
44 /**
45 * writes each element in the strings array to a line in the CSV file
46 *
47 * @param strings
48 */
49 public void writeRecord(String[] strings) throws IOException {
50 StringBuffer buf = new StringBuffer();
51 for (int i = 0; i < strings.length; i++) {
52 String string = strings[i];
53 boolean first = (i > 0);
54 boolean quote = alwaysQuote ||
55 string.indexOf(',') != -1 ||
56 string.indexOf('\n') != -1 ||
57 string.startsWith(" ") ||
58 string.endsWith(" ");
59 if (first) buf.append(',');
60 if (quote) buf.append("\"");
61 buf.append(string.replaceAll("\\\"", "\"\""));
62 if (quote) buf.append("\"");
63 }
64 buf.append("\n");
65 out.write(buf.toString());
66 }
67 }