X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;ds=inline;f=basic%2Fruntime%2Forg.argeo.basic.nodeps%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Futil%2FCsvWriter.java;fp=basic%2Fruntime%2Forg.argeo.basic.nodeps%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Futil%2FCsvWriter.java;h=2167af1ad18a71dbf7fab3331a6e17eaefabb0a2;hb=24d2e8155618208393100b9ba41ec0e2c656e903;hp=85356e4fed07c4f24e9f980698a983c85d1a17d9;hpb=6bb0606505be3e99021c5ff9771c719eb1e1f2e7;p=lgpl%2Fargeo-commons.git diff --git a/basic/runtime/org.argeo.basic.nodeps/src/main/java/org/argeo/util/CsvWriter.java b/basic/runtime/org.argeo.basic.nodeps/src/main/java/org/argeo/util/CsvWriter.java index 85356e4fe..2167af1ad 100644 --- a/basic/runtime/org.argeo.basic.nodeps/src/main/java/org/argeo/util/CsvWriter.java +++ b/basic/runtime/org.argeo.basic.nodeps/src/main/java/org/argeo/util/CsvWriter.java @@ -2,7 +2,9 @@ package org.argeo.util; import java.io.IOException; import java.io.OutputStream; -import java.io.PrintWriter; +import java.io.OutputStreamWriter; +import java.io.UnsupportedEncodingException; +import java.io.Writer; import java.util.Iterator; import java.util.List; @@ -10,21 +12,33 @@ import org.argeo.ArgeoException; /** Write in CSV format. */ public class CsvWriter { - private final PrintWriter out; + private final Writer out; private char separator = ','; private char quote = '\"'; /** - * Creates a CSV writer. The header will be written immediately to the - * stream. + * Creates a CSV writer. * * @param out * the stream to write to. Caller is responsible for closing it. */ public CsvWriter(OutputStream out) { - super(); - this.out = new PrintWriter(out); + this.out = new OutputStreamWriter(out); + } + + /** + * Creates a CSV writer. + * + * @param out + * the stream to write to. Caller is responsible for closing it. + */ + public CsvWriter(OutputStream out, String encoding) { + try { + this.out = new OutputStreamWriter(out, encoding); + } catch (UnsupportedEncodingException e) { + throw new ArgeoException("Cannot initialize CSV writer", e); + } } /** @@ -38,9 +52,9 @@ public class CsvWriter { while (it.hasNext()) { writeToken(it.next().toString()); if (it.hasNext()) - out.print(separator); + out.write(separator); } - out.print('\n'); + out.write('\n'); out.flush(); } catch (IOException e) { throw new ArgeoException("Could not write " + tokens, e); @@ -57,9 +71,9 @@ public class CsvWriter { for (int i = 0; i < tokens.length; i++) { writeToken(tokens[i].toString()); if (i != (tokens.length - 1)) - out.print(separator); + out.write(separator); } - out.print('\n'); + out.write('\n'); out.flush(); } catch (IOException e) { throw new ArgeoException("Could not write " + tokens, e); @@ -70,6 +84,7 @@ public class CsvWriter { // +2 for possible quotes, another +2 assuming there would be an already // quoted string where quotes needs to be duplicated // another +2 for safety + // we don't want to increase buffer size while writing StringBuffer buf = new StringBuffer(token.length() + 6); char[] arr = token.toCharArray(); boolean shouldQuote = false; @@ -92,10 +107,10 @@ public class CsvWriter { } if (shouldQuote == true) - out.print(quote); - out.print(buf.toString()); + out.write(quote); + out.write(buf.toString()); if (shouldQuote == true) - out.print(quote); + out.write(quote); } public void setSeparator(char separator) {