You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by Benedikt Ritter <br...@apache.org> on 2016/07/30 18:13:03 UTC
Re: commons-csv git commit: [CSV-189] CSVParser: Add factory method
accepting InputStream.
I think it would be better to use a Charset object as parameter instead of
a String.
WDYT?
<gg...@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 <gg...@apache.org>
> Authored: Sat Jul 30 10:57:13 2016 -0700
> Committer: Gary Gregory <gg...@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)) {
>
>
Re: commons-csv git commit: [CSV-189] CSVParser: Add factory method
accepting InputStream.
Posted by Benedikt Ritter <br...@apache.org>.
Nice, thank you!
Gary Gregory <ga...@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 <ga...@gmail.com>
> wrote:
>
> > Sure, or provide both?
> >
> > Gary
> >
> > On Jul 30, 2016 11:13 AM, "Benedikt Ritter" <br...@apache.org> wrote:
> >
> >> I think it would be better to use a Charset object as parameter instead
> of
> >> a String.
> >>
> >> WDYT?
> >>
> >> <gg...@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 <gg...@apache.org>
> >> > Authored: Sat Jul 30 10:57:13 2016 -0700
> >> > Committer: Gary Gregory <gg...@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: garydgregory@gmail.com | ggregory@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
>
Re: commons-csv git commit: [CSV-189] CSVParser: Add factory method
accepting InputStream.
Posted by Gary Gregory <ga...@gmail.com>.
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 <ga...@gmail.com>
wrote:
> Sure, or provide both?
>
> Gary
>
> On Jul 30, 2016 11:13 AM, "Benedikt Ritter" <br...@apache.org> wrote:
>
>> I think it would be better to use a Charset object as parameter instead of
>> a String.
>>
>> WDYT?
>>
>> <gg...@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 <gg...@apache.org>
>> > Authored: Sat Jul 30 10:57:13 2016 -0700
>> > Committer: Gary Gregory <gg...@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: garydgregory@gmail.com | ggregory@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
Re: commons-csv git commit: [CSV-189] CSVParser: Add factory method
accepting InputStream.
Posted by Gary Gregory <ga...@gmail.com>.
Sure, or provide both?
Gary
On Jul 30, 2016 11:13 AM, "Benedikt Ritter" <br...@apache.org> wrote:
> I think it would be better to use a Charset object as parameter instead of
> a String.
>
> WDYT?
>
> <gg...@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 <gg...@apache.org>
> > Authored: Sat Jul 30 10:57:13 2016 -0700
> > Committer: Gary Gregory <gg...@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)) {
> >
> >
>