X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.util%2Fsrc%2Forg%2Fargeo%2Futil%2FCsvWriter.java;h=c3b3a3ad7b43afa5989871fcaf0f223b1259a763;hb=3c1cdc594d954520b14646102b366290bdad58c7;hp=4b9fea3faa093ca99e4e47d42c7c3715c359afaa;hpb=77a5498dd5d10d2442127022efd6501a7dbddbae;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.util/src/org/argeo/util/CsvWriter.java b/org.argeo.util/src/org/argeo/util/CsvWriter.java index 4b9fea3fa..c3b3a3ad7 100644 --- a/org.argeo.util/src/org/argeo/util/CsvWriter.java +++ b/org.argeo.util/src/org/argeo/util/CsvWriter.java @@ -1,18 +1,3 @@ -/* - * Copyright (C) 2007-2012 Argeo GmbH - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ package org.argeo.util; import java.io.IOException; @@ -20,6 +5,7 @@ import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; import java.io.Writer; +import java.nio.charset.Charset; import java.util.Iterator; import java.util.List; @@ -33,9 +19,12 @@ public class CsvWriter { /** * Creates a CSV writer. * - * @param out - * the stream to write to. Caller is responsible for closing it. + * @param out the stream to write to. Caller is responsible for closing it. + * + * @deprecated Use {@link #CsvWriter(OutputStream, Charset)} instead. + * */ + @Deprecated public CsvWriter(OutputStream out) { this.out = new OutputStreamWriter(out); } @@ -43,48 +32,68 @@ public class CsvWriter { /** * Creates a CSV writer. * - * @param out - * the stream to write to. Caller is responsible for closing it. + * @param out the stream to write to. Caller is responsible for closing it. + * @param encoding the encoding to use. + * + * @deprecated Use {@link #CsvWriter(OutputStream, Charset)} instead. */ + @Deprecated public CsvWriter(OutputStream out, String encoding) { try { this.out = new OutputStreamWriter(out, encoding); } catch (UnsupportedEncodingException e) { - throw new UtilsException("Cannot initialize CSV writer", e); + throw new IllegalArgumentException(e); } } /** - * Write a CSV line. Also used to write a header if needed (this is - * transparent for the CSV writer): simply call it first, before writing the - * lines. + * Creates a CSV writer. + * + * @param out the stream to write to. Caller is responsible for closing it. + * @param charset the charset to use + */ + public CsvWriter(OutputStream out, Charset charset) { + this.out = new OutputStreamWriter(out, charset); + } + + /** + * Creates a CSV writer. + * + * @param out the stream to write to. Caller is responsible for closing it. + */ + public CsvWriter(Writer writer) { + this.out = writer; + } + + /** + * Write a CSV line. Also used to write a header if needed (this is transparent + * for the CSV writer): simply call it first, before writing the lines. */ public void writeLine(List tokens) { try { Iterator it = tokens.iterator(); while (it.hasNext()) { - writeToken(it.next().toString()); + Object obj = it.next(); + writeToken(obj != null ? obj.toString() : null); if (it.hasNext()) out.write(separator); } out.write('\n'); out.flush(); } catch (IOException e) { - throw new UtilsException("Could not write " + tokens, e); + throw new RuntimeException("Could not write " + tokens, e); } } /** - * Write a CSV line. Also used to write a header if needed (this is - * transparent for the CSV writer): simply call it first, before writing the - * lines. + * Write a CSV line. Also used to write a header if needed (this is transparent + * for the CSV writer): simply call it first, before writing the lines. */ public void writeLine(Object[] tokens) { try { for (int i = 0; i < tokens.length; i++) { if (tokens[i] == null) { - // TODO configure how to deal with null - writeToken(""); + writeToken(null); } else { writeToken(tokens[i].toString()); } @@ -94,11 +103,16 @@ public class CsvWriter { out.write('\n'); out.flush(); } catch (IOException e) { - throw new UtilsException("Could not write " + tokens, e); + throw new RuntimeException("Could not write " + tokens, e); } } protected void writeToken(String token) throws IOException { + if (token == null) { + // TODO configure how to deal with null + out.write(""); + return; + } // +2 for possible quotes, another +2 assuming there would be an already // quoted string where quotes needs to be duplicated // another +2 for safety