Nice, thank you! Gary Gregory <garydgreg...@gmail.com> schrieb am So., 31. Juli 2016 um 01:25:
> Nope, not both, fixed as you suggested which matches the ticket title > anyway. > > Gary > > On Sat, Jul 30, 2016 at 12:16 PM, Gary Gregory <garydgreg...@gmail.com> > wrote: > > > Sure, or provide both? > > > > Gary > > > > On Jul 30, 2016 11:13 AM, "Benedikt Ritter" <brit...@apache.org> wrote: > > > >> I think it would be better to use a Charset object as parameter instead > of > >> a String. > >> > >> WDYT? > >> > >> <ggreg...@apache.org> schrieb am Sa., 30. Juli 2016 um 19:57: > >> > >> > Repository: commons-csv > >> > Updated Branches: > >> > refs/heads/master 0d7c984c6 -> ac46f73b2 > >> > > >> > > >> > [CSV-189] CSVParser: Add factory method accepting InputStream. > >> > > >> > Project: http://git-wip-us.apache.org/repos/asf/commons-csv/repo > >> > Commit: > >> http://git-wip-us.apache.org/repos/asf/commons-csv/commit/ac46f73b > >> > Tree: > http://git-wip-us.apache.org/repos/asf/commons-csv/tree/ac46f73b > >> > Diff: > http://git-wip-us.apache.org/repos/asf/commons-csv/diff/ac46f73b > >> > > >> > Branch: refs/heads/master > >> > Commit: ac46f73b259412122680f217020ad473dc6e8781 > >> > Parents: 0d7c984 > >> > Author: Gary Gregory <ggreg...@apache.org> > >> > Authored: Sat Jul 30 10:57:13 2016 -0700 > >> > Committer: Gary Gregory <ggreg...@apache.org> > >> > Committed: Sat Jul 30 10:57:13 2016 -0700 > >> > > >> > ---------------------------------------------------------------------- > >> > src/changes/changes.xml | 1 + > >> > .../java/org/apache/commons/csv/CSVParser.java | 62 > >> +++++++++++++++++++- > >> > .../org/apache/commons/csv/CSVParserTest.java | 34 ++++++++++- > >> > 3 files changed, 92 insertions(+), 5 deletions(-) > >> > ---------------------------------------------------------------------- > >> > > >> > > >> > > >> > > >> > http://git-wip-us.apache.org/repos/asf/commons-csv/blob/ac46f73b/src/changes/changes.xml > >> > ---------------------------------------------------------------------- > >> > diff --git a/src/changes/changes.xml b/src/changes/changes.xml > >> > index 4960ea6..a8e9a75 100644 > >> > --- a/src/changes/changes.xml > >> > +++ b/src/changes/changes.xml > >> > @@ -40,6 +40,7 @@ > >> > <body> > >> > <release version="1.5" date="2016-MM-DD" description="Bug fix > >> > release"> > >> > <action issue="CSV-187" type="update" dev="ggregory" > due-to="Gary > >> > Gregory">Update platform requirement from Java 6 to 7.</action> > >> > + <action issue="CSV-189" type="add" dev="ggregory" due-to="Peter > >> > Holzwarth, Gary Gregory">CSVParser: Add factory method accepting > >> > InputStream.</action> > >> > <action issue="CSV-???" type="add" dev="ggregory" due-to="Gary > >> > Gregory">Add convenience API CSVFormat.print(File, Charset)</action> > >> > <action issue="CSV-???" type="add" dev="ggregory" due-to="Gary > >> > Gregory">Add convenience API CSVFormat.print(Path, Charset)</action> > >> > </release> > >> > > >> > > >> > > >> > http://git-wip-us.apache.org/repos/asf/commons-csv/blob/ac46f73b/src/main/java/org/apache/commons/csv/CSVParser.java > >> > ---------------------------------------------------------------------- > >> > diff --git a/src/main/java/org/apache/commons/csv/CSVParser.java > >> > b/src/main/java/org/apache/commons/csv/CSVParser.java > >> > index dc1684c..c718521 100644 > >> > --- a/src/main/java/org/apache/commons/csv/CSVParser.java > >> > +++ b/src/main/java/org/apache/commons/csv/CSVParser.java > >> > @@ -17,13 +17,17 @@ > >> > > >> > package org.apache.commons.csv; > >> > > >> > +import static org.apache.commons.csv.Token.Type.TOKEN; > >> > + > >> > import java.io.Closeable; > >> > import java.io.File; > >> > import java.io.FileInputStream; > >> > import java.io.IOException; > >> > +import java.io.InputStream; > >> > import java.io.InputStreamReader; > >> > import java.io.Reader; > >> > import java.io.StringReader; > >> > +import java.io.UnsupportedEncodingException; > >> > import java.net.URL; > >> > import java.nio.charset.Charset; > >> > import java.util.ArrayList; > >> > @@ -35,8 +39,6 @@ import java.util.Map; > >> > import java.util.NoSuchElementException; > >> > import java.util.TreeMap; > >> > > >> > -import static org.apache.commons.csv.Token.Type.*; > >> > - > >> > /** > >> > * Parses CSV files according to the specified format. > >> > * > >> > @@ -133,6 +135,62 @@ import static > org.apache.commons.csv.Token.Type.*; > >> > public final class CSVParser implements Iterable<CSVRecord>, > Closeable > >> { > >> > > >> > /** > >> > + * Customized CSV parser using the given {@link CSVFormat} > >> > + * > >> > + * <p> > >> > + * If you do not read all records from the given {@code reader}, > >> you > >> > should > >> > + * call {@link #close()} on the parser, unless you close the > {@code > >> > reader}. > >> > + * </p> > >> > + * > >> > + * @param reader > >> > + * a Reader containing CSV-formatted input. Must not > be > >> > null. > >> > + * @param charsetName > >> > + * The name of a supported {@link > >> java.nio.charset.Charset > >> > + * </code>charset<code>} > >> > + * @param format > >> > + * the CSVFormat used for CSV parsing. Must not be > null. > >> > + * @throws IllegalArgumentException > >> > + * If the parameters of the format are inconsistent > or > >> if > >> > either > >> > + * reader or format are null. > >> > + * @throws UnsupportedEncodingException > >> > + * If the named charset is not supported > >> > + * @throws IOException > >> > + * If there is a problem reading the header or > skipping > >> > the > >> > + * first record > >> > + * @since 1.5 > >> > + */ > >> > + @SuppressWarnings("resource") > >> > + public static CSVParser parse(final InputStream inputStream, > final > >> > String charset, final CSVFormat format) throws IOException { > >> > + Assertions.notNull(inputStream, "inputStream"); > >> > + Assertions.notNull(format, "format"); > >> > + return parse(new InputStreamReader(inputStream, charset), > >> format); > >> > + } > >> > + > >> > + /** > >> > + * Customized CSV parser using the given {@link CSVFormat} > >> > + * > >> > + * <p> > >> > + * If you do not read all records from the given {@code reader}, > >> you > >> > should > >> > + * call {@link #close()} on the parser, unless you close the > {@code > >> > reader}. > >> > + * </p> > >> > + * > >> > + * @param reader > >> > + * a Reader containing CSV-formatted input. Must not > be > >> > null. > >> > + * @param format > >> > + * the CSVFormat used for CSV parsing. Must not be > null. > >> > + * @throws IllegalArgumentException > >> > + * If the parameters of the format are inconsistent > or > >> if > >> > either > >> > + * reader or format are null. > >> > + * @throws IOException > >> > + * If there is a problem reading the header or > skipping > >> > the > >> > + * first record > >> > + * @since 1.5 > >> > + */ > >> > + public static CSVParser parse(Reader reader, final CSVFormat > >> format) > >> > throws IOException { > >> > + return new CSVParser(reader, format); > >> > + } > >> > + > >> > + /** > >> > * Creates a parser for the given {@link File}. > >> > * > >> > * <p><strong>Note:</strong> This method internally creates a > >> > FileReader using > >> > > >> > > >> > > >> > http://git-wip-us.apache.org/repos/asf/commons-csv/blob/ac46f73b/src/test/java/org/apache/commons/csv/CSVParserTest.java > >> > ---------------------------------------------------------------------- > >> > diff --git a/src/test/java/org/apache/commons/csv/CSVParserTest.java > >> > b/src/test/java/org/apache/commons/csv/CSVParserTest.java > >> > index 021279c..6fc8186 100644 > >> > --- a/src/test/java/org/apache/commons/csv/CSVParserTest.java > >> > +++ b/src/test/java/org/apache/commons/csv/CSVParserTest.java > >> > @@ -71,6 +71,11 @@ public class CSVParserTest { > >> > private static final String[][] RESULT = { { "a", "b", "c", "d" > }, > >> { > >> > "a", "b", "1 2" }, { "foo baar", "b", "" }, > >> > { "foo\n,,\n\",,\n\"", "d", "e" } }; > >> > > >> > + private BOMInputStream createBOMInputStream(String resource) > throws > >> > IOException { > >> > + final URL url = > >> > ClassLoader.getSystemClassLoader().getResource(resource); > >> > + return new BOMInputStream(url.openStream()); > >> > + } > >> > + > >> > @Test > >> > public void testBackslashEscaping() throws IOException { > >> > > >> > @@ -172,9 +177,8 @@ public class CSVParserTest { > >> > } > >> > > >> > @Test > >> > - public void testBOMInputStream() throws IOException { > >> > - final URL url = > >> > > ClassLoader.getSystemClassLoader().getResource("CSVFileParser/bom.csv"); > >> > - try (final Reader reader = new InputStreamReader(new > >> > BOMInputStream(url.openStream()), "UTF-8"); > >> > + public void testBOMInputStream_ParserWithReader() throws > >> IOException { > >> > + try (final Reader reader = new > >> > InputStreamReader(createBOMInputStream("CSVFileParser/bom.csv"), > >> "UTF-8"); > >> > final CSVParser parser = new CSVParser(reader, > >> > CSVFormat.EXCEL.withHeader())) { > >> > for (final CSVRecord record : parser) { > >> > final String string = record.get("Date"); > >> > @@ -185,6 +189,30 @@ public class CSVParserTest { > >> > } > >> > > >> > @Test > >> > + public void testBOMInputStream_parseWithReader() throws > >> IOException { > >> > + try (final Reader reader = new > >> > InputStreamReader(createBOMInputStream("CSVFileParser/bom.csv"), > >> "UTF-8"); > >> > + final CSVParser parser = CSVParser.parse(reader, > >> > CSVFormat.EXCEL.withHeader())) { > >> > + for (final CSVRecord record : parser) { > >> > + final String string = record.get("Date"); > >> > + Assert.assertNotNull(string); > >> > + // System.out.println("date: " + record.get("Date")); > >> > + } > >> > + } > >> > + } > >> > + > >> > + @Test > >> > + public void testBOMInputStream_ParserWithInputStream() throws > >> > IOException { > >> > + try (final BOMInputStream inputStream = > >> > createBOMInputStream("CSVFileParser/bom.csv"); > >> > + final CSVParser parser = CSVParser.parse(inputStream, > >> > "UTF-8", CSVFormat.EXCEL.withHeader())) { > >> > + for (final CSVRecord record : parser) { > >> > + final String string = record.get("Date"); > >> > + Assert.assertNotNull(string); > >> > + // System.out.println("date: " + record.get("Date")); > >> > + } > >> > + } > >> > + } > >> > + > >> > + @Test > >> > public void testCarriageReturnEndings() throws IOException { > >> > final String code = "foo\rbaar,\rhello,world\r,kanu"; > >> > try (final CSVParser parser = CSVParser.parse(code, > >> > CSVFormat.DEFAULT)) { > >> > > >> > > >> > > > > > -- > E-Mail: garydgreg...@gmail.com | ggreg...@apache.org > Java Persistence with Hibernate, Second Edition > <http://www.manning.com/bauer3/> > JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> > Spring Batch in Action <http://www.manning.com/templier/> > Blog: http://garygregory.wordpress.com > Home: http://garygregory.com/ > Tweet! http://twitter.com/GaryGregory >