Modified:
websites/production/commons/content/proper/commons-csv/jacoco/org.apache.commons.csv/CSVParser.java.html
==============================================================================
---
websites/production/commons/content/proper/commons-csv/jacoco/org.apache.commons.csv/CSVParser.java.html
(original)
+++
websites/production/commons/content/proper/commons-csv/jacoco/org.apache.commons.csv/CSVParser.java.html
Thu Feb 2 12:12:49 2023
@@ -26,6 +26,7 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringReader;
+import java.io.UncheckedIOException;
import java.net.URL;
import java.nio.charset.Charset;
import java.nio.file.Files;
@@ -42,6 +43,7 @@ import java.util.Objects;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.TreeMap;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
@@ -138,52 +140,51 @@ import java.util.stream.StreamSupport;
*/
public final class CSVParser implements Iterable<CSVRecord>, Closeable {
-<span class="fc" id="L141"> class CSVRecordIterator implements
Iterator<CSVRecord> {</span>
+<span class="fc" id="L143"> class CSVRecordIterator implements
Iterator<CSVRecord> {</span>
private CSVRecord current;
private CSVRecord getNextRecord() {
try {
-<span class="fc" id="L146"> return
CSVParser.this.nextRecord();</span>
-<span class="nc" id="L147"> } catch (final IOException e) {</span>
-<span class="nc" id="L148"> throw new
IllegalStateException(</span>
-<span class="nc" id="L149">
e.getClass().getSimpleName() + " reading next record: " +
e.toString(), e);</span>
+<span class="fc" id="L148"> return
CSVParser.this.nextRecord();</span>
+<span class="fc" id="L149"> } catch (final IOException e) {</span>
+<span class="fc" id="L150"> throw new
UncheckedIOException(e.getClass().getSimpleName() + " reading next record:
" + e.toString(), e);</span>
}
}
@Override
public boolean hasNext() {
-<span class="fc bfc" id="L155" title="All 2 branches covered."> if
(CSVParser.this.isClosed()) {</span>
-<span class="fc" id="L156"> return false;</span>
+<span class="fc bfc" id="L156" title="All 2 branches covered."> if
(CSVParser.this.isClosed()) {</span>
+<span class="fc" id="L157"> return false;</span>
}
-<span class="fc bfc" id="L158" title="All 2 branches covered."> if
(this.current == null) {</span>
-<span class="fc" id="L159"> this.current =
this.getNextRecord();</span>
+<span class="fc bfc" id="L159" title="All 2 branches covered."> if
(this.current == null) {</span>
+<span class="fc" id="L160"> this.current =
this.getNextRecord();</span>
}
-<span class="fc bfc" id="L162" title="All 2 branches covered.">
return this.current != null;</span>
+<span class="fc bfc" id="L163" title="All 2 branches covered.">
return this.current != null;</span>
}
@Override
public CSVRecord next() {
-<span class="fc bfc" id="L167" title="All 2 branches covered."> if
(CSVParser.this.isClosed()) {</span>
-<span class="fc" id="L168"> throw new
NoSuchElementException("CSVParser has been closed");</span>
+<span class="fc bfc" id="L168" title="All 2 branches covered."> if
(CSVParser.this.isClosed()) {</span>
+<span class="fc" id="L169"> throw new
NoSuchElementException("CSVParser has been closed");</span>
}
-<span class="fc" id="L170"> CSVRecord next = this.current;</span>
-<span class="fc" id="L171"> this.current = null;</span>
+<span class="fc" id="L171"> CSVRecord next = this.current;</span>
+<span class="fc" id="L172"> this.current = null;</span>
-<span class="fc bfc" id="L173" title="All 2 branches covered."> if
(next == null) {</span>
+<span class="fc bfc" id="L174" title="All 2 branches covered."> if
(next == null) {</span>
// hasNext() wasn't called before
-<span class="fc" id="L175"> next = this.getNextRecord();</span>
-<span class="fc bfc" id="L176" title="All 2 branches covered.">
if (next == null) {</span>
-<span class="fc" id="L177"> throw new
NoSuchElementException("No more CSV records available");</span>
+<span class="fc" id="L176"> next = this.getNextRecord();</span>
+<span class="fc bfc" id="L177" title="All 2 branches covered.">
if (next == null) {</span>
+<span class="fc" id="L178"> throw new
NoSuchElementException("No more CSV records available");</span>
}
}
-<span class="fc" id="L181"> return next;</span>
+<span class="fc" id="L182"> return next;</span>
}
@Override
public void remove() {
-<span class="fc" id="L186"> throw new
UnsupportedOperationException();</span>
+<span class="fc" id="L187"> throw new
UnsupportedOperationException();</span>
}
}
@@ -191,6 +192,7 @@ public final class CSVParser implements
* Header information based on name and position.
*/
private static final class Headers {
+
/**
* Header column positions (0-based)
*/
@@ -201,10 +203,10 @@ public final class CSVParser implements
*/
final List<String> headerNames;
-<span class="fc" id="L204"> Headers(final Map<String, Integer>
headerMap, final List<String> headerNames) {</span>
-<span class="fc" id="L205"> this.headerMap = headerMap;</span>
-<span class="fc" id="L206"> this.headerNames = headerNames;</span>
-<span class="fc" id="L207"> }</span>
+<span class="fc" id="L206"> Headers(final Map<String, Integer>
headerMap, final List<String> headerNames) {</span>
+<span class="fc" id="L207"> this.headerMap = headerMap;</span>
+<span class="fc" id="L208"> this.headerNames = headerNames;</span>
+<span class="fc" id="L209"> }</span>
}
/**
@@ -223,8 +225,8 @@ public final class CSVParser implements
* If an I/O error occurs
*/
public static CSVParser parse(final File file, final Charset charset,
final CSVFormat format) throws IOException {
-<span class="fc" id="L226"> Objects.requireNonNull(file,
"file");</span>
-<span class="fc" id="L227"> return parse(file.toPath(), charset,
format);</span>
+<span class="fc" id="L228"> Objects.requireNonNull(file,
"file");</span>
+<span class="fc" id="L229"> return parse(file.toPath(), charset,
format);</span>
}
/**
@@ -251,9 +253,9 @@ public final class CSVParser implements
@SuppressWarnings("resource")
public static CSVParser parse(final InputStream inputStream, final Charset
charset, final CSVFormat format)
throws IOException {
-<span class="fc" id="L254"> Objects.requireNonNull(inputStream,
"inputStream");</span>
-<span class="fc" id="L255"> Objects.requireNonNull(format,
"format");</span>
-<span class="fc" id="L256"> return parse(new
InputStreamReader(inputStream, charset), format);</span>
+<span class="fc" id="L256"> Objects.requireNonNull(inputStream,
"inputStream");</span>
+<span class="fc" id="L257"> Objects.requireNonNull(format,
"format");</span>
+<span class="fc" id="L258"> return parse(new
InputStreamReader(inputStream, charset), format);</span>
}
/**
@@ -274,9 +276,9 @@ public final class CSVParser implements
*/
@SuppressWarnings("resource")
public static CSVParser parse(final Path path, final Charset charset,
final CSVFormat format) throws IOException {
-<span class="fc" id="L277"> Objects.requireNonNull(path,
"path");</span>
-<span class="fc" id="L278"> Objects.requireNonNull(format,
"format");</span>
-<span class="fc" id="L279"> return parse(Files.newInputStream(path),
charset, format);</span>
+<span class="fc" id="L279"> Objects.requireNonNull(path,
"path");</span>
+<span class="fc" id="L280"> Objects.requireNonNull(format,
"format");</span>
+<span class="fc" id="L281"> return parse(Files.newInputStream(path),
charset, format);</span>
}
/**
@@ -299,7 +301,7 @@ public final class CSVParser implements
* @since 1.5
*/
public static CSVParser parse(final Reader reader, final CSVFormat format)
throws IOException {
-<span class="fc" id="L302"> return new CSVParser(reader, format);</span>
+<span class="fc" id="L304"> return new CSVParser(reader, format);</span>
}
// the following objects are shared to reduce garbage
@@ -318,10 +320,10 @@ public final class CSVParser implements
* If an I/O error occurs
*/
public static CSVParser parse(final String string, final CSVFormat format)
throws IOException {
-<span class="fc" id="L321"> Objects.requireNonNull(string,
"string");</span>
-<span class="fc" id="L322"> Objects.requireNonNull(format,
"format");</span>
+<span class="fc" id="L323"> Objects.requireNonNull(string,
"string");</span>
+<span class="fc" id="L324"> Objects.requireNonNull(format,
"format");</span>
-<span class="fc" id="L324"> return new CSVParser(new
StringReader(string), format);</span>
+<span class="fc" id="L326"> return new CSVParser(new
StringReader(string), format);</span>
}
/**
@@ -346,13 +348,17 @@ public final class CSVParser implements
*/
@SuppressWarnings("resource")
public static CSVParser parse(final URL url, final Charset charset, final
CSVFormat format) throws IOException {
-<span class="fc" id="L349"> Objects.requireNonNull(url,
"url");</span>
-<span class="fc" id="L350"> Objects.requireNonNull(charset,
"charset");</span>
-<span class="fc" id="L351"> Objects.requireNonNull(format,
"format");</span>
+<span class="fc" id="L351"> Objects.requireNonNull(url,
"url");</span>
+<span class="fc" id="L352"> Objects.requireNonNull(charset,
"charset");</span>
+<span class="fc" id="L353"> Objects.requireNonNull(format,
"format");</span>
-<span class="fc" id="L353"> return new CSVParser(new
InputStreamReader(url.openStream(), charset), format);</span>
+<span class="fc" id="L355"> return new CSVParser(new
InputStreamReader(url.openStream(), charset), format);</span>
}
+ private String headerComment;
+
+ private String trailerComment;
+
private final CSVFormat format;
private final Headers headers;
@@ -362,7 +368,7 @@ public final class CSVParser implements
private final CSVRecordIterator csvRecordIterator;
/** A record buffer for getRecord(). Grows as necessary and is reused. */
-<span class="fc" id="L365"> private final List<String> recordList =
new ArrayList<>();</span>
+<span class="fc" id="L371"> private final List<String> recordList =
new ArrayList<>();</span>
/**
* The next record number to assign.
@@ -375,10 +381,10 @@ public final class CSVParser implements
*/
private final long characterOffset;
-<span class="fc" id="L378"> private final Token reusableToken = new
Token();</span>
+<span class="fc" id="L384"> private final Token reusableToken = new
Token();</span>
/**
- * Customized CSV parser using the given {@link CSVFormat}
+ * Constructs a new instance 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,
@@ -395,11 +401,11 @@ public final class CSVParser implements
* If there is a problem reading the header or skipping the
first record
*/
public CSVParser(final Reader reader, final CSVFormat format) throws
IOException {
-<span class="fc" id="L398"> this(reader, format, 0, 1);</span>
-<span class="fc" id="L399"> }</span>
+<span class="fc" id="L404"> this(reader, format, 0, 1);</span>
+<span class="fc" id="L405"> }</span>
/**
- * Customized CSV parser using the given {@link CSVFormat}
+ * Constructs a new instance 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,
@@ -422,26 +428,25 @@ public final class CSVParser implements
*/
@SuppressWarnings("resource")
public CSVParser(final Reader reader, final CSVFormat format, final long
characterOffset, final long recordNumber)
-<span class="fc" id="L425"> throws IOException {</span>
-<span class="fc" id="L426"> Objects.requireNonNull(reader,
"reader");</span>
-<span class="fc" id="L427"> Objects.requireNonNull(format,
"format");</span>
-
-<span class="fc" id="L429"> this.format = format.copy();</span>
-<span class="fc" id="L430"> this.lexer = new Lexer(format, new
ExtendedBufferedReader(reader));</span>
-<span class="fc" id="L431"> this.csvRecordIterator = new
CSVRecordIterator();</span>
-<span class="fc" id="L432"> this.headers = createHeaders();</span>
-<span class="fc" id="L433"> this.characterOffset =
characterOffset;</span>
-<span class="fc" id="L434"> this.recordNumber = recordNumber - 1;</span>
-<span class="fc" id="L435"> }</span>
+<span class="fc" id="L431"> throws IOException {</span>
+<span class="fc" id="L432"> Objects.requireNonNull(reader,
"reader");</span>
+<span class="fc" id="L433"> Objects.requireNonNull(format,
"format");</span>
+
+<span class="fc" id="L435"> this.format = format.copy();</span>
+<span class="fc" id="L436"> this.lexer = new Lexer(format, new
ExtendedBufferedReader(reader));</span>
+<span class="fc" id="L437"> this.csvRecordIterator = new
CSVRecordIterator();</span>
+<span class="fc" id="L438"> this.headers = createHeaders();</span>
+<span class="fc" id="L439"> this.characterOffset =
characterOffset;</span>
+<span class="fc" id="L440"> this.recordNumber = recordNumber - 1;</span>
+<span class="fc" id="L441"> }</span>
private void addRecordValue(final boolean lastRecord) {
-<span class="fc" id="L438"> final String input =
this.reusableToken.content.toString();</span>
-<span class="fc bfc" id="L439" title="All 2 branches covered."> final
String inputClean = this.format.getTrim() ? input.trim() : input;</span>
-<span class="fc bfc" id="L440" title="All 6 branches covered."> if
(lastRecord && inputClean.isEmpty() &&
this.format.getTrailingDelimiter()) {</span>
-<span class="fc" id="L441"> return;</span>
+<span class="fc" id="L444"> final String input =
this.format.trim(this.reusableToken.content.toString());</span>
+<span class="fc bfc" id="L445" title="All 6 branches covered."> if
(lastRecord && input.isEmpty() &&
this.format.getTrailingDelimiter()) {</span>
+<span class="fc" id="L446"> return;</span>
}
-<span class="fc" id="L443">
this.recordList.add(handleNull(inputClean));</span>
-<span class="fc" id="L444"> }</span>
+<span class="fc" id="L448">
this.recordList.add(handleNull(input));</span>
+<span class="fc" id="L449"> }</span>
/**
* Closes resources.
@@ -451,13 +456,13 @@ public final class CSVParser implements
*/
@Override
public void close() throws IOException {
-<span class="pc bpc" id="L454" title="1 of 2 branches missed."> if
(this.lexer != null) {</span>
-<span class="fc" id="L455"> this.lexer.close();</span>
+<span class="pc bpc" id="L459" title="1 of 2 branches missed."> if
(this.lexer != null) {</span>
+<span class="fc" id="L460"> this.lexer.close();</span>
}
-<span class="fc" id="L457"> }</span>
+<span class="fc" id="L462"> }</span>
private Map<String, Integer> createEmptyHeaderMap() {
-<span class="fc bfc" id="L460" title="All 2 branches covered."> return
this.format.getIgnoreHeaderCase() ?</span>
+<span class="fc bfc" id="L465" title="All 2 branches covered."> return
this.format.getIgnoreHeaderCase() ?</span>
new TreeMap<>(String.CASE_INSENSITIVE_ORDER) :
new LinkedHashMap<>();
}
@@ -469,62 +474,73 @@ public final class CSVParser implements
* @throws IOException if there is a problem reading the header or
skipping the first record
*/
private Headers createHeaders() throws IOException {
-<span class="fc" id="L472"> Map<String, Integer> hdrMap =
null;</span>
-<span class="fc" id="L473"> List<String> headerNames =
null;</span>
-<span class="fc" id="L474"> final String[] formatHeader =
this.format.getHeader();</span>
-<span class="fc bfc" id="L475" title="All 2 branches covered."> if
(formatHeader != null) {</span>
-<span class="fc" id="L476"> hdrMap = createEmptyHeaderMap();</span>
-<span class="fc" id="L477"> String[] headerRecord = null;</span>
-<span class="fc bfc" id="L478" title="All 2 branches covered."> if
(formatHeader.length == 0) {</span>
+<span class="fc" id="L477"> Map<String, Integer> hdrMap =
null;</span>
+<span class="fc" id="L478"> List<String> headerNames =
null;</span>
+<span class="fc" id="L479"> final String[] formatHeader =
this.format.getHeader();</span>
+<span class="fc bfc" id="L480" title="All 2 branches covered."> if
(formatHeader != null) {</span>
+<span class="fc" id="L481"> hdrMap = createEmptyHeaderMap();</span>
+<span class="fc" id="L482"> String[] headerRecord = null;</span>
+<span class="fc bfc" id="L483" title="All 2 branches covered."> if
(formatHeader.length == 0) {</span>
// read the header from the first line of the file
-<span class="fc" id="L480"> final CSVRecord nextRecord =
this.nextRecord();</span>
-<span class="fc bfc" id="L481" title="All 2 branches covered.">
if (nextRecord != null) {</span>
-<span class="fc" id="L482"> headerRecord =
nextRecord.values();</span>
+<span class="fc" id="L485"> final CSVRecord nextRecord =
this.nextRecord();</span>
+<span class="fc bfc" id="L486" title="All 2 branches covered.">
if (nextRecord != null) {</span>
+<span class="fc" id="L487"> headerRecord =
nextRecord.values();</span>
+<span class="fc" id="L488"> headerComment =
nextRecord.getComment();</span>
}
-<span class="fc" id="L484"> } else {</span>
-<span class="fc bfc" id="L485" title="All 2 branches covered.">
if (this.format.getSkipHeaderRecord()) {</span>
-<span class="fc" id="L486"> this.nextRecord();</span>
+<span class="fc" id="L490"> } else {</span>
+<span class="fc bfc" id="L491" title="All 2 branches covered.">
if (this.format.getSkipHeaderRecord()) {</span>
+<span class="fc" id="L492"> final CSVRecord nextRecord =
this.nextRecord();</span>
+<span class="pc bpc" id="L493" title="1 of 2 branches missed.">
if (nextRecord != null) {</span>
+<span class="fc" id="L494"> headerComment =
nextRecord.getComment();</span>
+ }
}
-<span class="fc" id="L488"> headerRecord = formatHeader;</span>
+<span class="fc" id="L497"> headerRecord = formatHeader;</span>
}
// build the name to index mappings
-<span class="fc bfc" id="L492" title="All 2 branches covered."> if
(headerRecord != null) {</span>
-<span class="fc bfc" id="L493" title="All 2 branches covered.">
for (int i = 0; i < headerRecord.length; i++) {</span>
-<span class="fc" id="L494"> final String header =
headerRecord[i];</span>
-<span class="fc bfc" id="L495" title="All 4 branches covered.">
final boolean emptyHeader = header == null ||
header.trim().isEmpty();</span>
-<span class="fc bfc" id="L496" title="All 4 branches covered.">
if (emptyHeader && !this.format.getAllowMissingColumnNames())
{</span>
-<span class="fc" id="L497"> throw new
IllegalArgumentException(</span>
-<span class="fc" id="L498"> "A header name is
missing in " + Arrays.toString(headerRecord));</span>
+<span class="fc bfc" id="L501" title="All 2 branches covered."> if
(headerRecord != null) {</span>
+ // Track an occurrence of a null, empty or blank header.
+<span class="fc" id="L503"> boolean observedMissing =
false;</span>
+<span class="fc bfc" id="L504" title="All 2 branches covered.">
for (int i = 0; i < headerRecord.length; i++) {</span>
+<span class="fc" id="L505"> final String header =
headerRecord[i];</span>
+<span class="fc" id="L506"> final boolean blankHeader =
CSVFormat.isBlank(header);</span>
+<span class="fc bfc" id="L507" title="All 4 branches covered.">
if (blankHeader && !this.format.getAllowMissingColumnNames())
{</span>
+<span class="fc" id="L508"> throw new
IllegalArgumentException(</span>
+<span class="fc" id="L509"> "A header name is
missing in " + Arrays.toString(headerRecord));</span>
}
- // Note: This will always allow a duplicate header if the
header is empty
-<span class="fc bfc" id="L501" title="All 4 branches covered.">
final boolean containsHeader = header != null &&
hdrMap.containsKey(header);</span>
-<span class="fc bfc" id="L502" title="All 6 branches covered.">
if (containsHeader && !emptyHeader &&
!this.format.getAllowDuplicateHeaderNames()) {</span>
-<span class="fc" id="L503"> throw new
IllegalArgumentException(</span>
-<span class="fc" id="L504"> String.format(</span>
- "The header contains a duplicate name:
\"%s\" in %s. If this is valid then use
CSVFormat.withAllowDuplicateHeaderNames().",
-<span class="fc" id="L506"> header,
Arrays.toString(headerRecord)));</span>
+
+<span class="fc bfc" id="L512" title="All 2 branches covered.">
final boolean containsHeader = blankHeader ? observedMissing :
hdrMap.containsKey(header);</span>
+<span class="fc" id="L513"> final DuplicateHeaderMode
headerMode = this.format.getDuplicateHeaderMode();</span>
+<span class="fc bfc" id="L514" title="All 2 branches covered.">
final boolean duplicatesAllowed = headerMode ==
DuplicateHeaderMode.ALLOW_ALL;</span>
+<span class="fc bfc" id="L515" title="All 2 branches covered.">
final boolean emptyDuplicatesAllowed = headerMode ==
DuplicateHeaderMode.ALLOW_EMPTY;</span>
+
+<span class="fc bfc" id="L517" title="All 8 branches covered.">
if (containsHeader && !duplicatesAllowed && !(blankHeader
&& emptyDuplicatesAllowed)) {</span>
+<span class="fc" id="L518"> throw new
IllegalArgumentException(</span>
+<span class="fc" id="L519"> String.format(</span>
+ "The header contains a duplicate name:
\"%s\" in %s. If this is valid then use
CSVFormat.Builder.setDuplicateHeaderMode().",
+<span class="fc" id="L521"> header,
Arrays.toString(headerRecord)));</span>
}
-<span class="fc bfc" id="L508" title="All 2 branches covered.">
if (header != null) {</span>
-<span class="fc" id="L509"> hdrMap.put(header,
Integer.valueOf(i));</span>
-<span class="fc bfc" id="L510" title="All 2 branches covered.">
if (headerNames == null) {</span>
-<span class="fc" id="L511"> headerNames = new
ArrayList<>(headerRecord.length);</span>
+<span class="fc" id="L523"> observedMissing |=
blankHeader;</span>
+<span class="fc bfc" id="L524" title="All 2 branches covered.">
if (header != null) {</span>
+<span class="fc" id="L525"> hdrMap.put(header,
Integer.valueOf(i));</span>
+<span class="fc bfc" id="L526" title="All 2 branches covered.">
if (headerNames == null) {</span>
+<span class="fc" id="L527"> headerNames = new
ArrayList<>(headerRecord.length);</span>
}
-<span class="fc" id="L513">
headerNames.add(header);</span>
+<span class="fc" id="L529">
headerNames.add(header);</span>
}
}
}
}
-<span class="fc bfc" id="L518" title="All 2 branches covered."> if
(headerNames == null) {</span>
-<span class="fc" id="L519"> headerNames = Collections.emptyList();
//immutable</span>
+<span class="fc bfc" id="L534" title="All 2 branches covered."> if
(headerNames == null) {</span>
+<span class="fc" id="L535"> headerNames = Collections.emptyList();
// immutable</span>
} else {
-<span class="fc" id="L521"> headerNames =
Collections.unmodifiableList(headerNames);</span>
+<span class="fc" id="L537"> headerNames =
Collections.unmodifiableList(headerNames);</span>
}
-<span class="fc" id="L523"> return new Headers(hdrMap,
headerNames);</span>
+<span class="fc" id="L539"> return new Headers(hdrMap,
headerNames);</span>
}
/**
- * Returns the current line number in the input stream.
+ * Gets the current line number in the input stream.
*
* <p>
* <strong>ATTENTION:</strong> If your CSV input has
multi-line values, the returned number does not correspond to
@@ -534,7 +550,7 @@ public final class CSVParser implements
* @return current line number
*/
public long getCurrentLineNumber() {
-<span class="fc" id="L537"> return
this.lexer.getCurrentLineNumber();</span>
+<span class="fc" id="L553"> return
this.lexer.getCurrentLineNumber();</span>
}
/**
@@ -544,11 +560,22 @@ public final class CSVParser implements
* @since 1.5
*/
public String getFirstEndOfLine() {
-<span class="fc" id="L547"> return lexer.getFirstEol();</span>
+<span class="fc" id="L563"> return lexer.getFirstEol();</span>
+ }
+
+ /**
+ * Gets the header comment, if any.
+ * The header comment appears before the header record.
+ *
+ * @return the header comment for this stream, or null if no comment is
available.
+ * @since 1.10.0
+ */
+ public String getHeaderComment() {
+<span class="fc" id="L574"> return headerComment;</span>
}
/**
- * Returns a copy of the header map.
+ * Gets a copy of the header map as defined in the CSVFormat's header.
* <p>
* The map keys are column names. The map values are 0-based indices.
* </p>
@@ -560,25 +587,25 @@ public final class CSVParser implements
* @return a copy of the header map.
*/
public Map<String, Integer> getHeaderMap() {
-<span class="fc bfc" id="L563" title="All 2 branches covered."> if
(this.headers.headerMap == null) {</span>
-<span class="fc" id="L564"> return null;</span>
+<span class="fc bfc" id="L590" title="All 2 branches covered."> if
(this.headers.headerMap == null) {</span>
+<span class="fc" id="L591"> return null;</span>
}
-<span class="fc" id="L566"> final Map<String, Integer> map =
createEmptyHeaderMap();</span>
-<span class="fc" id="L567"> map.putAll(this.headers.headerMap);</span>
-<span class="fc" id="L568"> return map;</span>
+<span class="fc" id="L593"> final Map<String, Integer> map =
createEmptyHeaderMap();</span>
+<span class="fc" id="L594"> map.putAll(this.headers.headerMap);</span>
+<span class="fc" id="L595"> return map;</span>
}
/**
- * Returns the header map.
+ * Gets the underlying header map.
*
- * @return the header map.
+ * @return the underlying header map.
*/
Map<String, Integer> getHeaderMapRaw() {
-<span class="fc" id="L577"> return this.headers.headerMap;</span>
+<span class="fc" id="L604"> return this.headers.headerMap;</span>
}
/**
- * Returns a read-only list of header names that iterates in column order.
+ * Gets a read-only list of header names that iterates in column order as
defined in the CSVFormat's header.
* <p>
* Note: The list provides strings that can be used as keys in the header
map.
* The list will not contain null column names if they were present in the
input
@@ -590,11 +617,11 @@ public final class CSVParser implements
* @since 1.7
*/
public List<String> getHeaderNames() {
-<span class="fc" id="L593"> return
Collections.unmodifiableList(headers.headerNames);</span>
+<span class="fc" id="L620"> return
Collections.unmodifiableList(headers.headerNames);</span>
}
/**
- * Returns the current record number in the input stream.
+ * Gets the current record number in the input stream.
*
* <p>
* <strong>ATTENTION:</strong> If your CSV input has
multi-line values, the returned number does not correspond to
@@ -604,7 +631,7 @@ public final class CSVParser implements
* @return current record number
*/
public long getRecordNumber() {
-<span class="fc" id="L607"> return this.recordNumber;</span>
+<span class="fc" id="L634"> return this.recordNumber;</span>
}
/**
@@ -616,16 +643,22 @@ public final class CSVParser implements
* </p>
*
* @return list of {@link CSVRecord CSVRecords}, may be empty
- * @throws IOException
+ * @throws UncheckedIOException
* on parse error or input read-failure
*/
- public List<CSVRecord> getRecords() throws IOException {
- CSVRecord rec;
-<span class="fc" id="L624"> final List<CSVRecord> records = new
ArrayList<>();</span>
-<span class="fc bfc" id="L625" title="All 2 branches covered."> while
((rec = this.nextRecord()) != null) {</span>
-<span class="fc" id="L626"> records.add(rec);</span>
- }
-<span class="fc" id="L628"> return records;</span>
+ public List<CSVRecord> getRecords() {
+<span class="fc" id="L650"> return
stream().collect(Collectors.toList());</span>
+ }
+
+ /**
+ * Gets the trailer comment, if any.
+ * Trailer comments are located between the last record and EOF
+ *
+ * @return the trailer comment for this stream, or null if no comment is
available.
+ * @since 1.10.0
+ */
+ public String getTrailerComment() {
+<span class="fc" id="L661"> return trailerComment;</span>
}
/**
@@ -636,15 +669,44 @@ public final class CSVParser implements
* @return null if input is parsed as null, or input itself if input isn't
parsed as null
*/
private String handleNull(final String input) {
-<span class="fc" id="L639"> final boolean isQuoted =
this.reusableToken.isQuoted;</span>
-<span class="fc" id="L640"> final String nullString =
format.getNullString();</span>
-<span class="fc" id="L641"> final boolean strictQuoteMode =
isStrictQuoteMode();</span>
-<span class="fc bfc" id="L642" title="All 2 branches covered."> if
(input.equals(nullString)) {</span>
+<span class="fc" id="L672"> final boolean isQuoted =
this.reusableToken.isQuoted;</span>
+<span class="fc" id="L673"> final String nullString =
format.getNullString();</span>
+<span class="fc" id="L674"> final boolean strictQuoteMode =
isStrictQuoteMode();</span>
+<span class="fc bfc" id="L675" title="All 2 branches covered."> if
(input.equals(nullString)) {</span>
// nullString = NULL(String), distinguish between "NULL"
and NULL in ALL_NON_NULL or NON_NUMERIC quote mode
-<span class="fc bfc" id="L644" title="All 4 branches covered.">
return strictQuoteMode && isQuoted ? input : null;</span>
+<span class="fc bfc" id="L677" title="All 4 branches covered.">
return strictQuoteMode && isQuoted ? input : null;</span>
}
// don't set nullString, distinguish between "" and ,,
(absent values) in All_NON_NULL or NON_NUMERIC quote mode
-<span class="fc bfc" id="L647" title="All 8 branches covered."> return
strictQuoteMode && nullString == null && input.isEmpty()
&& !isQuoted ? null : input;</span>
+<span class="fc bfc" id="L680" title="All 8 branches covered."> return
strictQuoteMode && nullString == null && input.isEmpty()
&& !isQuoted ? null : input;</span>
+ }
+
+ /**
+ * Checks whether there is a header comment.
+ * The header comment appears before the header record.
+ * Note that if the parser's format has been given an explicit header
+ * (with {@link CSVFormat.Builder#setHeader(String... )} or another
overload)
+ * and the header record is not being skipped
+ * ({@link CSVFormat.Builder#setSkipHeaderRecord} is false) then any
initial comments
+ * will be associated with the first record, not the header.
+ *
+ * @return true if this parser has seen a header comment, false otherwise
+ * @since 1.10.0
+ */
+ public boolean hasHeaderComment() {
+<span class="fc bfc" id="L696" title="All 2 branches covered."> return
headerComment != null;</span>
+ }
+
+ /**
+ * Checks whether there is a trailer comment.
+ * Trailer comments are located between the last record and EOF.
+ * The trailer comments will only be available after the parser has
+ * finished processing this stream.
+ *
+ * @return true if this parser has seen a trailer comment, false otherwise
+ * @since 1.10.0
+ */
+ public boolean hasTrailerComment() {
+<span class="fc bfc" id="L709" title="All 2 branches covered."> return
trailerComment != null;</span>
}
/**
@@ -653,7 +715,7 @@ public final class CSVParser implements
* @return whether this parser is closed.
*/
public boolean isClosed() {
-<span class="fc" id="L656"> return this.lexer.isClosed();</span>
+<span class="fc" id="L718"> return this.lexer.isClosed();</span>
}
/**
@@ -663,8 +725,8 @@ public final class CSVParser implements
* {@link QuoteMode#NON_NUMERIC}.
*/
private boolean isStrictQuoteMode() {
-<span class="fc bfc" id="L666" title="All 2 branches covered."> return
this.format.getQuoteMode() == QuoteMode.ALL_NON_NULL ||</span>
-<span class="fc bfc" id="L667" title="All 2 branches covered.">
this.format.getQuoteMode() == QuoteMode.NON_NUMERIC;</span>
+<span class="fc bfc" id="L728" title="All 2 branches covered."> return
this.format.getQuoteMode() == QuoteMode.ALL_NON_NULL ||</span>
+<span class="fc bfc" id="L729" title="All 2 branches covered.">
this.format.getQuoteMode() == QuoteMode.NON_NUMERIC;</span>
}
/**
@@ -675,13 +737,20 @@ public final class CSVParser implements
* {@link IllegalStateException}.
* </p>
* <p>
- * If the parser is closed a call to {@link Iterator#next()} will throw a
+ * If the parser is closed, the iterator will not yield any more records.
+ * A call to {@link Iterator#hasNext()} will return {@code false} and
+ * a call to {@link Iterator#next()} will throw a
* {@link NoSuchElementException}.
* </p>
+ * <p>
+ * If it is necessary to construct an iterator which is usable after the
+ * parser is closed, one option is to extract all records as a list with
+ * {@link #getRecords()}, and return an iterator to that list.
+ * </p>
*/
@Override
public Iterator<CSVRecord> iterator() {
-<span class="fc" id="L684"> return csvRecordIterator;</span>
+<span class="fc" id="L753"> return csvRecordIterator;</span>
}
/**
@@ -692,59 +761,64 @@ public final class CSVParser implements
* on parse error or input read-failure
*/
CSVRecord nextRecord() throws IOException {
-<span class="fc" id="L695"> CSVRecord result = null;</span>
-<span class="fc" id="L696"> this.recordList.clear();</span>
-<span class="fc" id="L697"> StringBuilder sb = null;</span>
-<span class="fc" id="L698"> final long startCharPosition =
lexer.getCharacterPosition() + this.characterOffset;</span>
+<span class="fc" id="L764"> CSVRecord result = null;</span>
+<span class="fc" id="L765"> this.recordList.clear();</span>
+<span class="fc" id="L766"> StringBuilder sb = null;</span>
+<span class="fc" id="L767"> final long startCharPosition =
lexer.getCharacterPosition() + this.characterOffset;</span>
do {
-<span class="fc" id="L700"> this.reusableToken.reset();</span>
-<span class="fc" id="L701">
this.lexer.nextToken(this.reusableToken);</span>
-<span class="pc bpc" id="L702" title="2 of 6 branches missed.">
switch (this.reusableToken.type) {</span>
+<span class="fc" id="L769"> this.reusableToken.reset();</span>
+<span class="fc" id="L770">
this.lexer.nextToken(this.reusableToken);</span>
+<span class="pc bpc" id="L771" title="2 of 6 branches missed.">
switch (this.reusableToken.type) {</span>
case TOKEN:
-<span class="fc" id="L704"> this.addRecordValue(false);</span>
-<span class="fc" id="L705"> break;</span>
+<span class="fc" id="L773"> this.addRecordValue(false);</span>
+<span class="fc" id="L774"> break;</span>
case EORECORD:
-<span class="fc" id="L707"> this.addRecordValue(true);</span>
-<span class="fc" id="L708"> break;</span>
+<span class="fc" id="L776"> this.addRecordValue(true);</span>
+<span class="fc" id="L777"> break;</span>
case EOF:
-<span class="fc bfc" id="L710" title="All 2 branches covered.">
if (this.reusableToken.isReady) {</span>
-<span class="fc" id="L711">
this.addRecordValue(true);</span>
+<span class="fc bfc" id="L779" title="All 2 branches covered.">
if (this.reusableToken.isReady) {</span>
+<span class="fc" id="L780">
this.addRecordValue(true);</span>
+<span class="fc bfc" id="L781" title="All 2 branches covered.">
} else if (sb != null) {</span>
+<span class="fc" id="L782"> trailerComment =
sb.toString();</span>
}
break;
case INVALID:
-<span class="nc" id="L715"> throw new IOException("(line
" + this.getCurrentLineNumber() + ") invalid parse
sequence");</span>
+<span class="nc" id="L786"> throw new IOException("(line
" + this.getCurrentLineNumber() + ") invalid parse
sequence");</span>
case COMMENT: // Ignored currently
-<span class="fc bfc" id="L717" title="All 2 branches covered.">
if (sb == null) { // first comment for this record</span>
-<span class="fc" id="L718"> sb = new StringBuilder();</span>
+<span class="fc bfc" id="L788" title="All 2 branches covered.">
if (sb == null) { // first comment for this record</span>
+<span class="fc" id="L789"> sb = new StringBuilder();</span>
} else {
-<span class="fc" id="L720"> sb.append(Constants.LF);</span>
+<span class="fc" id="L791"> sb.append(Constants.LF);</span>
}
-<span class="fc" id="L722">
sb.append(this.reusableToken.content);</span>
-<span class="fc" id="L723"> this.reusableToken.type = TOKEN; //
Read another token</span>
-<span class="fc" id="L724"> break;</span>
+<span class="fc" id="L793">
sb.append(this.reusableToken.content);</span>
+<span class="fc" id="L794"> this.reusableToken.type = TOKEN; //
Read another token</span>
+<span class="fc" id="L795"> break;</span>
default:
-<span class="nc" id="L726"> throw new
IllegalStateException("Unexpected Token type: " +
this.reusableToken.type);</span>
+<span class="nc" id="L797"> throw new
IllegalStateException("Unexpected Token type: " +
this.reusableToken.type);</span>
}
-<span class="fc bfc" id="L728" title="All 2 branches covered."> } while
(this.reusableToken.type == TOKEN);</span>
+<span class="fc bfc" id="L799" title="All 2 branches covered."> } while
(this.reusableToken.type == TOKEN);</span>
-<span class="fc bfc" id="L730" title="All 2 branches covered."> if
(!this.recordList.isEmpty()) {</span>
-<span class="fc" id="L731"> this.recordNumber++;</span>
-<span class="fc bfc" id="L732" title="All 2 branches covered.">
final String comment = sb == null ? null : sb.toString();</span>
-<span class="fc" id="L733"> result = new CSVRecord(this,
this.recordList.toArray(Constants.EMPTY_STRING_ARRAY), comment,</span>
+<span class="fc bfc" id="L801" title="All 2 branches covered."> if
(!this.recordList.isEmpty()) {</span>
+<span class="fc" id="L802"> this.recordNumber++;</span>
+<span class="fc bfc" id="L803" title="All 2 branches covered.">
final String comment = sb == null ? null : sb.toString();</span>
+<span class="fc" id="L804"> result = new CSVRecord(this,
this.recordList.toArray(Constants.EMPTY_STRING_ARRAY), comment,</span>
this.recordNumber, startCharPosition);
}
-<span class="fc" id="L736"> return result;</span>
+<span class="fc" id="L807"> return result;</span>
}
/**
* Returns a sequential {@code Stream} with this collection as its source.
- *
+ * <p>
+ * If the parser is closed, the stream will not produce any more values.
+ * See the comments in {@link #iterator()}.
+ * </p>
* @return a sequential {@code Stream} with this collection as its source.
* @since 1.9.0
*/
public Stream<CSVRecord> stream() {
-<span class="fc" id="L746"> return
StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator(),
Spliterator.ORDERED), false);</span>
+<span class="fc" id="L820"> return
StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator(),
Spliterator.ORDERED), false);</span>
}
}
-</pre><div class="footer"><span class="right">Created with <a
href="http://www.jacoco.org/jacoco">JaCoCo</a>
0.8.7.202105040129</span></div></body></html>
\ No newline at end of file
+</pre><div class="footer"><span class="right">Created with <a
href="http://www.jacoco.org/jacoco">JaCoCo</a>
0.8.8.202204050719</span></div></body></html>
\ No newline at end of file
Modified:
websites/production/commons/content/proper/commons-csv/jacoco/org.apache.commons.csv/CSVPrinter.html
==============================================================================
---
websites/production/commons/content/proper/commons-csv/jacoco/org.apache.commons.csv/CSVPrinter.html
(original)
+++
websites/production/commons/content/proper/commons-csv/jacoco/org.apache.commons.csv/CSVPrinter.html
Thu Feb 2 12:12:49 2023
@@ -1 +1 @@
-<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML
1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html
xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta
http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link
rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link
rel="shortcut icon" href="../jacoco-resources/report.gif"
type="image/gif"/><title>CSVPrinter</title><script type="text/javascript"
src="../jacoco-resources/sort.js"></script></head><body
onload="initialSort(['breadcrumb'])"><div class="breadcrumb"
id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html"
class="el_session">Sessions</a></span><a href="../index.html"
class="el_report">Apache Commons CSV</a> > <a href="index.html"
class="el_package">org.apache.commons.csv</a> > <span
class="el_class">CSVPrinter</span></div><h1>CSVPrinter</h1><table
class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td cla
ss="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down
sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td
class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td
class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td
class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td
class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td
class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td
class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td
class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td
class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td
class="sortable ctr2" id="k"
onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td
class="bar">0 of 300</td><td class="ctr2">100%</td><td class="bar">0 of
47</td><td class="ctr2">100%</td><td class="ctr1">0</td><td
class="ctr2">39</td><td class="ctr
1">0</td><td class="ctr2">77</td><td class="ctr1">0</td><td
class="ctr2">15</td></tr></tfoot><tbody><tr><td id="a6"><a
href="CSVPrinter.java.html#L192"
class="el_method">printComment(String)</a></td><td class="bar" id="b0"><img
src="../jacoco-resources/greenbar.gif" width="120" height="10" title="77"
alt="77"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"><img
src="../jacoco-resources/greenbar.gif" width="120" height="10" title="15"
alt="15"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1"
id="f0">0</td><td class="ctr2" id="g0">9</td><td class="ctr1" id="h0">0</td><td
class="ctr2" id="i0">18</td><td class="ctr1" id="j0">0</td><td class="ctr2"
id="k0">1</td></tr><tr><td id="a2"><a href="CSVPrinter.java.html#L77"
class="el_method">CSVPrinter(Appendable, CSVFormat)</a></td><td class="bar"
id="b1"><img src="../jacoco-resources/greenbar.gif" width="85" height="10"
title="55" alt="55"/></td><td class="ctr2" id="c1">100%</td><td class="bar"
id="d1"><img src="../jac
oco-resources/greenbar.gif" width="64" height="10" title="8" alt="8"/></td><td
class="ctr2" id="e1">100%</td><td class="ctr1" id="f1">0</td><td class="ctr2"
id="g1">5</td><td class="ctr1" id="h1">0</td><td class="ctr2"
id="i1">12</td><td class="ctr1" id="j1">0</td><td class="ctr2"
id="k1">1</td></tr><tr><td id="a11"><a href="CSVPrinter.java.html#L321"
class="el_method">printRecords(Iterable)</a></td><td class="bar" id="b2"><img
src="../jacoco-resources/greenbar.gif" width="56" height="10" title="36"
alt="36"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"><img
src="../jacoco-resources/greenbar.gif" width="48" height="10" title="6"
alt="6"/></td><td class="ctr2" id="e2">100%</td><td class="ctr1"
id="f2">0</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h2">0</td><td
class="ctr2" id="i2">8</td><td class="ctr1" id="j2">0</td><td class="ctr2"
id="k2">1</td></tr><tr><td id="a13"><a href="CSVPrinter.java.html#L386"
class="el_method">printRecords(ResultSet)</a></td>
<td class="bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="49"
height="10" title="32" alt="32"/></td><td class="ctr2" id="c3">100%</td><td
class="bar" id="d3"><img src="../jacoco-resources/greenbar.gif" width="48"
height="10" title="6" alt="6"/></td><td class="ctr2" id="e3">100%</td><td
class="ctr1" id="f3">0</td><td class="ctr2" id="g3">4</td><td class="ctr1"
id="h3">0</td><td class="ctr2" id="i3">7</td><td class="ctr1" id="j3">0</td><td
class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a
href="CSVPrinter.java.html#L127" class="el_method">close(boolean)</a></td><td
class="bar" id="b4"><img src="../jacoco-resources/greenbar.gif" width="26"
height="10" title="17" alt="17"/></td><td class="ctr2" id="c4">100%</td><td
class="bar" id="d4"><img src="../jacoco-resources/greenbar.gif" width="48"
height="10" title="6" alt="6"/></td><td class="ctr2" id="e4">100%</td><td
class="ctr1" id="f4">0</td><td class="ctr2" id="g4">4</td><td class="ctr1"
id="h4">0</td><td class="ctr2" id=
"i4">5</td><td class="ctr1" id="j4">0</td><td class="ctr2"
id="k4">1</td></tr><tr><td id="a9"><a href="CSVPrinter.java.html#L258"
class="el_method">printRecord(Iterable)</a></td><td class="bar" id="b5"><img
src="../jacoco-resources/greenbar.gif" width="24" height="10" title="16"
alt="16"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d5"><img
src="../jacoco-resources/greenbar.gif" width="16" height="10" title="2"
alt="2"/></td><td class="ctr2" id="e5">100%</td><td class="ctr1"
id="f5">0</td><td class="ctr2" id="g5">2</td><td class="ctr1" id="h5">0</td><td
class="ctr2" id="i5">5</td><td class="ctr1" id="j5">0</td><td class="ctr2"
id="k5">1</td></tr><tr><td id="a5"><a href="CSVPrinter.java.html#L166"
class="el_method">print(Object)</a></td><td class="bar" id="b6"><img
src="../jacoco-resources/greenbar.gif" width="18" height="10" title="12"
alt="12"/></td><td class="ctr2" id="c6">100%</td><td class="bar" id="d8"/><td
class="ctr2" id="e8">n/a</td><td class="ctr1" id="f6">0<
/td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h6">0</td><td
class="ctr2" id="i7">3</td><td class="ctr1" id="j6">0</td><td class="ctr2"
id="k6">1</td></tr><tr><td id="a7"><a href="CSVPrinter.java.html#L230"
class="el_method">printHeaders(ResultSet)</a></td><td class="bar" id="b7"><img
src="../jacoco-resources/greenbar.gif" width="17" height="10" title="11"
alt="11"/></td><td class="ctr2" id="c7">100%</td><td class="bar" id="d9"/><td
class="ctr2" id="e9">n/a</td><td class="ctr1" id="f7">0</td><td class="ctr2"
id="g9">1</td><td class="ctr1" id="h7">0</td><td class="ctr2"
id="i10">2</td><td class="ctr1" id="j7">0</td><td class="ctr2"
id="k7">1</td></tr><tr><td id="a3"><a href="CSVPrinter.java.html#L143"
class="el_method">flush()</a></td><td class="bar" id="b8"><img
src="../jacoco-resources/greenbar.gif" width="14" height="10" title="9"
alt="9"/></td><td class="ctr2" id="c8">100%</td><td class="bar" id="d6"><img
src="../jacoco-resources/greenbar.gif" width="16" height="10" titl
e="2" alt="2"/></td><td class="ctr2" id="e6">100%</td><td class="ctr1"
id="f8">0</td><td class="ctr2" id="g6">2</td><td class="ctr1" id="h8">0</td><td
class="ctr2" id="i8">3</td><td class="ctr1" id="j8">0</td><td class="ctr2"
id="k8">1</td></tr><tr><td id="a8"><a href="CSVPrinter.java.html#L240"
class="el_method">println()</a></td><td class="bar" id="b9"><img
src="../jacoco-resources/greenbar.gif" width="14" height="10" title="9"
alt="9"/></td><td class="ctr2" id="c9">100%</td><td class="bar" id="d10"/><td
class="ctr2" id="e10">n/a</td><td class="ctr1" id="f9">0</td><td class="ctr2"
id="g10">1</td><td class="ctr1" id="h9">0</td><td class="ctr2"
id="i9">3</td><td class="ctr1" id="j9">0</td><td class="ctr2"
id="k9">1</td></tr><tr><td id="a14"><a href="CSVPrinter.java.html#L407"
class="el_method">printRecords(ResultSet, boolean)</a></td><td class="bar"
id="b10"><img src="../jacoco-resources/greenbar.gif" width="14" height="10"
title="9" alt="9"/></td><td class="ctr2" id="c10">100%</td>
<td class="bar" id="d7"><img src="../jacoco-resources/greenbar.gif" width="16"
height="10" title="2" alt="2"/></td><td class="ctr2" id="e7">100%</td><td
class="ctr1" id="f10">0</td><td class="ctr2" id="g7">2</td><td class="ctr1"
id="h10">0</td><td class="ctr2" id="i6">4</td><td class="ctr1"
id="j10">0</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a10"><a
href="CSVPrinter.java.html#L278"
class="el_method">printRecord(Object[])</a></td><td class="bar" id="b11"><img
src="../jacoco-resources/greenbar.gif" width="7" height="10" title="5"
alt="5"/></td><td class="ctr2" id="c11">100%</td><td class="bar" id="d11"/><td
class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">0</td><td class="ctr2"
id="g11">1</td><td class="ctr1" id="h11">0</td><td class="ctr2"
id="i11">2</td><td class="ctr1" id="j11">0</td><td class="ctr2"
id="k11">1</td></tr><tr><td id="a12"><a href="CSVPrinter.java.html#L372"
class="el_method">printRecords(Object[])</a></td><td class="bar" id="b12"><img
src="../jacoc
o-resources/greenbar.gif" width="7" height="10" title="5" alt="5"/></td><td
class="ctr2" id="c12">100%</td><td class="bar" id="d12"/><td class="ctr2"
id="e12">n/a</td><td class="ctr1" id="f12">0</td><td class="ctr2"
id="g12">1</td><td class="ctr1" id="h12">0</td><td class="ctr2"
id="i12">2</td><td class="ctr1" id="j12">0</td><td class="ctr2"
id="k12">1</td></tr><tr><td id="a0"><a href="CSVPrinter.java.html#L115"
class="el_method">close()</a></td><td class="bar" id="b13"><img
src="../jacoco-resources/greenbar.gif" width="6" height="10" title="4"
alt="4"/></td><td class="ctr2" id="c13">100%</td><td class="bar" id="d13"/><td
class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">0</td><td class="ctr2"
id="g13">1</td><td class="ctr1" id="h13">0</td><td class="ctr2"
id="i13">2</td><td class="ctr1" id="j13">0</td><td class="ctr2"
id="k13">1</td></tr><tr><td id="a4"><a href="CSVPrinter.java.html#L154"
class="el_method">getOut()</a></td><td class="bar" id="b14"><img
src="../jacoco-resource
s/greenbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2"
id="c14">100%</td><td class="bar" id="d14"/><td class="ctr2"
id="e14">n/a</td><td class="ctr1" id="f14">0</td><td class="ctr2"
id="g14">1</td><td class="ctr1" id="h14">0</td><td class="ctr2"
id="i14">1</td><td class="ctr1" id="j14">0</td><td class="ctr2"
id="k14">1</td></tr></tbody></table><div class="footer"><span
class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a>
0.8.7.202105040129</span></div></body></html>
\ No newline at end of file
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML
1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html
xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta
http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link
rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link
rel="shortcut icon" href="../jacoco-resources/report.gif"
type="image/gif"/><title>CSVPrinter</title><script type="text/javascript"
src="../jacoco-resources/sort.js"></script></head><body
onload="initialSort(['breadcrumb'])"><div class="breadcrumb"
id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html"
class="el_session">Sessions</a></span><a href="../index.html"
class="el_report">Apache Commons CSV</a> > <a href="index.html"
class="el_package">org.apache.commons.csv</a> > <span
class="el_class">CSVPrinter</span></div><h1>CSVPrinter</h1><table
class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td cla
ss="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down
sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td
class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td
class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td
class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td
class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td
class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td
class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td
class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td
class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td
class="sortable ctr2" id="k"
onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td
class="bar">8 of 335</td><td class="ctr2">97%</td><td class="bar">0 of
47</td><td class="ctr2">100%</td><td class="ctr1">0</td><td
class="ctr2">44</td><td class="ctr1
">4</td><td class="ctr2">95</td><td class="ctr1">0</td><td
class="ctr2">20</td></tr></tfoot><tbody><tr><td id="a6"><a
href="CSVPrinter.java.html#L490"
class="el_method">lambda$printRecords$1(Object)</a></td><td class="bar"
id="b0"><img src="../jacoco-resources/redbar.gif" width="6" height="10"
title="4" alt="4"/><img src="../jacoco-resources/greenbar.gif" width="7"
height="10" title="5" alt="5"/></td><td class="ctr2" id="c18">55%</td><td
class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1"
id="f0">0</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h0">2</td><td
class="ctr2" id="i4">5</td><td class="ctr1" id="j0">0</td><td class="ctr2"
id="k0">1</td></tr><tr><td id="a5"><a href="CSVPrinter.java.html#L301"
class="el_method">lambda$printRecord$0(Object)</a></td><td class="bar"
id="b1"><img src="../jacoco-resources/redbar.gif" width="6" height="10"
title="4" alt="4"/><img src="../jacoco-resources/greenbar.gif" width="7"
height="10" title="5" alt="5"/></td><td cl
ass="ctr2" id="c19">55%</td><td class="bar" id="d10"/><td class="ctr2"
id="e10">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2"
id="g10">1</td><td class="ctr1" id="h1">2</td><td class="ctr2"
id="i5">5</td><td class="ctr1" id="j1">0</td><td class="ctr2"
id="k1">1</td></tr><tr><td id="a8"><a href="CSVPrinter.java.html#L195"
class="el_method">printComment(String)</a></td><td class="bar" id="b2"><img
src="../jacoco-resources/greenbar.gif" width="120" height="10" title="77"
alt="77"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"><img
src="../jacoco-resources/greenbar.gif" width="120" height="10" title="15"
alt="15"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1"
id="f2">0</td><td class="ctr2" id="g0">9</td><td class="ctr1" id="h2">0</td><td
class="ctr2" id="i0">18</td><td class="ctr1" id="j2">0</td><td class="ctr2"
id="k2">1</td></tr><tr><td id="a2"><a href="CSVPrinter.java.html#L79"
class="el_method">CSVPrinter(Appendable, CSVFormat)</a></td><td class="
bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="87"
height="10" title="56" alt="56"/></td><td class="ctr2" id="c1">100%</td><td
class="bar" id="d1"><img src="../jacoco-resources/greenbar.gif" width="64"
height="10" title="8" alt="8"/></td><td class="ctr2" id="e1">100%</td><td
class="ctr1" id="f3">0</td><td class="ctr2" id="g1">5</td><td class="ctr1"
id="h3">0</td><td class="ctr2" id="i1">13</td><td class="ctr1"
id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a17"><a
href="CSVPrinter.java.html#L418"
class="el_method">printRecords(ResultSet)</a></td><td class="bar" id="b4"><img
src="../jacoco-resources/greenbar.gif" width="49" height="10" title="32"
alt="32"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"><img
src="../jacoco-resources/greenbar.gif" width="48" height="10" title="6"
alt="6"/></td><td class="ctr2" id="e2">100%</td><td class="ctr1"
id="f4">0</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h4">0</td><td
class="ctr2" id=
"i2">7</td><td class="ctr1" id="j4">0</td><td class="ctr2"
id="k4">1</td></tr><tr><td id="a14"><a href="CSVPrinter.java.html#L310"
class="el_method">printRecordObject(Object)</a></td><td class="bar"
id="b5"><img src="../jacoco-resources/greenbar.gif" width="40" height="10"
title="26" alt="26"/></td><td class="ctr2" id="c3">100%</td><td class="bar"
id="d4"><img src="../jacoco-resources/greenbar.gif" width="32" height="10"
title="4" alt="4"/></td><td class="ctr2" id="e3">100%</td><td class="ctr1"
id="f5">0</td><td class="ctr2" id="g4">3</td><td class="ctr1" id="h5">0</td><td
class="ctr2" id="i3">6</td><td class="ctr1" id="j5">0</td><td class="ctr2"
id="k5">1</td></tr><tr><td id="a1"><a href="CSVPrinter.java.html#L130"
class="el_method">close(boolean)</a></td><td class="bar" id="b6"><img
src="../jacoco-resources/greenbar.gif" width="26" height="10" title="17"
alt="17"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d3"><img
src="../jacoco-resources/greenbar.gif" width="48"
height="10" title="6" alt="6"/></td><td class="ctr2" id="e4">100%</td><td
class="ctr1" id="f6">0</td><td class="ctr2" id="g3">4</td><td class="ctr1"
id="h6">0</td><td class="ctr2" id="i6">5</td><td class="ctr1" id="j6">0</td><td
class="ctr2" id="k6">1</td></tr><tr><td id="a11"><a
href="CSVPrinter.java.html#L261"
class="el_method">printRecord(Iterable)</a></td><td class="bar" id="b7"><img
src="../jacoco-resources/greenbar.gif" width="24" height="10" title="16"
alt="16"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d5"><img
src="../jacoco-resources/greenbar.gif" width="16" height="10" title="2"
alt="2"/></td><td class="ctr2" id="e5">100%</td><td class="ctr1"
id="f7">0</td><td class="ctr2" id="g5">2</td><td class="ctr1" id="h7">0</td><td
class="ctr2" id="i7">5</td><td class="ctr1" id="j7">0</td><td class="ctr2"
id="k7">1</td></tr><tr><td id="a15"><a href="CSVPrinter.java.html#L359"
class="el_method">printRecords(Iterable)</a></td><td class="bar" id="b8"><img
src="../jacoc
o-resources/greenbar.gif" width="21" height="10" title="14" alt="14"/></td><td
class="ctr2" id="c6">100%</td><td class="bar" id="d6"><img
src="../jacoco-resources/greenbar.gif" width="16" height="10" title="2"
alt="2"/></td><td class="ctr2" id="e6">100%</td><td class="ctr1"
id="f8">0</td><td class="ctr2" id="g6">2</td><td class="ctr1" id="h8">0</td><td
class="ctr2" id="i8">4</td><td class="ctr1" id="j8">0</td><td class="ctr2"
id="k8">1</td></tr><tr><td id="a7"><a href="CSVPrinter.java.html#L169"
class="el_method">print(Object)</a></td><td class="bar" id="b9"><img
src="../jacoco-resources/greenbar.gif" width="18" height="10" title="12"
alt="12"/></td><td class="ctr2" id="c7">100%</td><td class="bar" id="d11"/><td
class="ctr2" id="e11">n/a</td><td class="ctr1" id="f9">0</td><td class="ctr2"
id="g11">1</td><td class="ctr1" id="h9">0</td><td class="ctr2"
id="i10">3</td><td class="ctr1" id="j9">0</td><td class="ctr2"
id="k9">1</td></tr><tr><td id="a9"><a href="CSVPrinter.java.html#L233"
class="el_method">printHeaders(ResultSet)</a></td><td class="bar"
id="b10"><img src="../jacoco-resources/greenbar.gif" width="17" height="10"
title="11" alt="11"/></td><td class="ctr2" id="c8">100%</td><td class="bar"
id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f10">0</td><td
class="ctr2" id="g12">1</td><td class="ctr1" id="h10">0</td><td class="ctr2"
id="i14">2</td><td class="ctr1" id="j10">0</td><td class="ctr2"
id="k10">1</td></tr><tr><td id="a3"><a href="CSVPrinter.java.html#L146"
class="el_method">flush()</a></td><td class="bar" id="b11"><img
src="../jacoco-resources/greenbar.gif" width="14" height="10" title="9"
alt="9"/></td><td class="ctr2" id="c9">100%</td><td class="bar" id="d7"><img
src="../jacoco-resources/greenbar.gif" width="16" height="10" title="2"
alt="2"/></td><td class="ctr2" id="e7">100%</td><td class="ctr1"
id="f11">0</td><td class="ctr2" id="g7">2</td><td class="ctr1"
id="h11">0</td><td class="ctr2" id="i11">3</td><td class="ctr1" id="j11">
0</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a10"><a
href="CSVPrinter.java.html#L243" class="el_method">println()</a></td><td
class="bar" id="b12"><img src="../jacoco-resources/greenbar.gif" width="14"
height="10" title="9" alt="9"/></td><td class="ctr2" id="c10">100%</td><td
class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1"
id="f12">0</td><td class="ctr2" id="g13">1</td><td class="ctr1"
id="h12">0</td><td class="ctr2" id="i12">3</td><td class="ctr1"
id="j12">0</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a18"><a
href="CSVPrinter.java.html#L439" class="el_method">printRecords(ResultSet,
boolean)</a></td><td class="bar" id="b13"><img
src="../jacoco-resources/greenbar.gif" width="14" height="10" title="9"
alt="9"/></td><td class="ctr2" id="c11">100%</td><td class="bar" id="d8"><img
src="../jacoco-resources/greenbar.gif" width="16" height="10" title="2"
alt="2"/></td><td class="ctr2" id="e8">100%</td><td class="ctr1"
id="f13">0</td><td class="ct
r2" id="g8">2</td><td class="ctr1" id="h13">0</td><td class="ctr2"
id="i9">4</td><td class="ctr1" id="j13">0</td><td class="ctr2"
id="k13">1</td></tr><tr><td id="a13"><a href="CSVPrinter.java.html#L299"
class="el_method">printRecord(Stream)</a></td><td class="bar" id="b14"><img
src="../jacoco-resources/greenbar.gif" width="10" height="10" title="7"
alt="7"/></td><td class="ctr2" id="c12">100%</td><td class="bar" id="d14"/><td
class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">0</td><td class="ctr2"
id="g14">1</td><td class="ctr1" id="h14">0</td><td class="ctr2"
id="i13">3</td><td class="ctr1" id="j14">0</td><td class="ctr2"
id="k14">1</td></tr><tr><td id="a12"><a href="CSVPrinter.java.html#L281"
class="el_method">printRecord(Object[])</a></td><td class="bar" id="b15"><img
src="../jacoco-resources/greenbar.gif" width="7" height="10" title="5"
alt="5"/></td><td class="ctr2" id="c13">100%</td><td class="bar" id="d15"/><td
class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">0</
td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">0</td><td
class="ctr2" id="i15">2</td><td class="ctr1" id="j15">0</td><td class="ctr2"
id="k15">1</td></tr><tr><td id="a16"><a href="CSVPrinter.java.html#L404"
class="el_method">printRecords(Object[])</a></td><td class="bar" id="b16"><img
src="../jacoco-resources/greenbar.gif" width="7" height="10" title="5"
alt="5"/></td><td class="ctr2" id="c14">100%</td><td class="bar" id="d16"/><td
class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">0</td><td class="ctr2"
id="g16">1</td><td class="ctr1" id="h16">0</td><td class="ctr2"
id="i16">2</td><td class="ctr1" id="j16">0</td><td class="ctr2"
id="k16">1</td></tr><tr><td id="a19"><a href="CSVPrinter.java.html#L488"
class="el_method">printRecords(Stream)</a></td><td class="bar" id="b17"><img
src="../jacoco-resources/greenbar.gif" width="7" height="10" title="5"
alt="5"/></td><td class="ctr2" id="c15">100%</td><td class="bar" id="d17"/><td
class="ctr2" id="e17">n/a</td><td class=
"ctr1" id="f17">0</td><td class="ctr2" id="g17">1</td><td class="ctr1"
id="h17">0</td><td class="ctr2" id="i17">2</td><td class="ctr1"
id="j17">0</td><td class="ctr2" id="k17">1</td></tr><tr><td id="a0"><a
href="CSVPrinter.java.html#L118" class="el_method">close()</a></td><td
class="bar" id="b18"><img src="../jacoco-resources/greenbar.gif" width="6"
height="10" title="4" alt="4"/></td><td class="ctr2" id="c16">100%</td><td
class="bar" id="d18"/><td class="ctr2" id="e18">n/a</td><td class="ctr1"
id="f18">0</td><td class="ctr2" id="g18">1</td><td class="ctr1"
id="h18">0</td><td class="ctr2" id="i18">2</td><td class="ctr1"
id="j18">0</td><td class="ctr2" id="k18">1</td></tr><tr><td id="a4"><a
href="CSVPrinter.java.html#L157" class="el_method">getOut()</a></td><td
class="bar" id="b19"><img src="../jacoco-resources/greenbar.gif" width="4"
height="10" title="3" alt="3"/></td><td class="ctr2" id="c17">100%</td><td
class="bar" id="d19"/><td class="ctr2" id="e19">n/a</td><td class="ctr1" id=
"f19">0</td><td class="ctr2" id="g19">1</td><td class="ctr1"
id="h19">0</td><td class="ctr2" id="i19">1</td><td class="ctr1"
id="j19">0</td><td class="ctr2" id="k19">1</td></tr></tbody></table><div
class="footer"><span class="right">Created with <a
href="http://www.jacoco.org/jacoco">JaCoCo</a>
0.8.8.202204050719</span></div></body></html>
\ No newline at end of file