Class CsvReader<T>

  • Type Parameters:
    T - the type of the CSV record.
    All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, java.lang.Iterable<T>

    public final class CsvReader<T>
    extends java.lang.Object
    implements java.lang.Iterable<T>, java.io.Closeable
    This is the main class for reading CSV data.

    The CSV records are read iteratively, regardless of whether the Iterable, the Iterator, or the Stream is used. Once all records are read, the data is consumed. If you need to repeatedly read records, you should collect the records in a List or another collection.

    Example use:

    Example for named records:

    • Field Detail

      • csvParser

        private final CsvParser csvParser
      • skipEmptyLines

        private final boolean skipEmptyLines
      • ignoreDifferentFieldCount

        private final boolean ignoreDifferentFieldCount
      • firstRecordFieldCount

        private int firstRecordFieldCount
    • Method Detail

      • iterator

        public CloseableIterator<T> iterator()
        Returns an iterator over elements of type CsvRecord.

        The returned iterator is not thread-safe. Remember to close the returned iterator when you're done. Alternatively, use stream().
        This method is idempotent and can be called multiple times.

        Specified by:
        iterator in interface java.lang.Iterable<T>
        Returns:
        an iterator over the CSV records.
        Throws:
        java.io.UncheckedIOException - if an I/O error occurs.
        CsvParseException - if any other problem occurs when parsing the CSV data.
        See Also:
        stream()
      • spliterator

        public java.util.Spliterator<T> spliterator()
        Returns a Spliterator over elements of type CsvRecord.

        The returned spliterator is not thread-safe. Remember to invoke close() when you're done. Alternatively, use stream().
        This method is idempotent and can be called multiple times.

        Specified by:
        spliterator in interface java.lang.Iterable<T>
        Returns:
        a spliterator over the CSV records.
        Throws:
        java.io.UncheckedIOException - if an I/O error occurs.
        CsvParseException - if any other problem occurs when parsing the CSV data.
        See Also:
        stream()
      • stream

        public java.util.stream.Stream<T> stream()
        Returns a new sequential Stream with this reader as its source.

        The returned stream is not thread-safe. Remember to close the returned stream when you're done. Closing the stream will also close this reader.
        This method can be called multiple times, although it creates a new stream each time.
        The stream is not reusable after it has been closed.

        Returns:
        a sequential Stream over the CSV records.
        Throws:
        java.io.UncheckedIOException - if an I/O error occurs.
        CsvParseException - if any other problem occurs when parsing the CSV data.
        See Also:
        iterator()
      • fetchRecord

        private T fetchRecord()
                       throws java.io.IOException
        Throws:
        java.io.IOException
      • processRecord

        private T processRecord()
      • checkFieldCountConsistency

        private void checkFieldCountConsistency​(int fieldCount)
      • close

        public void close()
                   throws java.io.IOException
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable
        Throws:
        java.io.IOException
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • fetch

        private T fetch()
      • buildExceptionMessage

        private java.lang.String buildExceptionMessage()