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)) {
> >
> >
>