Commit ac5f642c authored by Emmanuel Bourg's avatar Emmanuel Bourg

New upstream version 1.7

parent dc81ee67
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
language: java
sudo: false
script:
- mvn
jdk:
- openjdk7
- oraclejdk8
- oraclejdk9
after_success:
- mvn -B -V -Ptravis-jacoco clean test jacoco:report coveralls:report
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
language: java
jdk:
- oraclejdk8
- oraclejdk11
- openjdk8
- openjdk11
- openjdk12
- openjdk-ea
after_success:
- mvn -B -V clean test jacoco:report coveralls:report -Ptravis-jacoco
\ No newline at end of file
......@@ -25,7 +25,7 @@
| commons-build-plugin/trunk/src/main/resources/commons-xdoc-templates |
+======================================================================+
| |
| 1) Re-generate using: mvn commons:contributing-md |
| 1) Re-generate using: mvn commons-build:contributing-md |
| |
| 2) Set the following properties in the component's pom: |
| - commons.jira.id (required, alphabetic, upper case) |
......
Apache Commons CSV
Copyright 2005-2018 The Apache Software Foundation
Copyright 2005-2019 The Apache Software Foundation
This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).
......@@ -25,7 +25,7 @@
| commons-build-plugin/trunk/src/main/resources/commons-xdoc-templates |
+======================================================================+
| |
| 1) Re-generate using: mvn commons:readme-md |
| 1) Re-generate using: mvn commons-build:readme-md |
| |
| 2) Set the following properties in the component's pom: |
| - commons.componentid (required, alphabetic, lower case) |
......@@ -46,7 +46,7 @@ Apache Commons CSV
[![Build Status](https://travis-ci.org/apache/commons-csv.svg)](https://travis-ci.org/apache/commons-csv)
[![Coverage Status](https://coveralls.io/repos/apache/commons-csv/badge.svg)](https://coveralls.io/r/apache/commons-csv)
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/org.apache.commons/commons-csv/badge.svg)](https://maven-badges.herokuapp.com/maven-central/org.apache.commons/commons-csv/)
[![Javadocs](https://javadoc.io/badge/org.apache.commons/commons-csv/1.6.svg)](https://javadoc.io/doc/org.apache.commons/commons-csv/1.6)
[![Javadocs](https://javadoc.io/badge/org.apache.commons/commons-csv/1.7.svg)](https://javadoc.io/doc/org.apache.commons/commons-csv/1.7)
The Apache Commons CSV library provides a simple interface for reading and writing
CSV files of various types.
......@@ -55,7 +55,7 @@ Documentation
-------------
More information can be found on the [Apache Commons CSV homepage](https://commons.apache.org/proper/commons-csv).
The [Javadoc](https://commons.apache.org/proper/commons-csv/javadocs/api-release) can be browsed.
The [Javadoc](https://commons.apache.org/proper/commons-csv/apidocs) can be browsed.
Questions related to the usage of Apache Commons CSV should be posted to the [user mailing list][ml].
Where can I get the latest release?
......@@ -68,7 +68,7 @@ Alternatively you can pull it from the central Maven repositories:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-csv</artifactId>
<version>1.6</version>
<version>1.7</version>
</dependency>
```
......
Apache Commons CSV
Version 1.6
Release Notes
Version 1.7
Release Notes
INTRODUCTION:
This document contains the release notes for the 1.7 version of Apache Commons CSV.
Commons CSV reads and writes files in variations of the Comma Separated Value (CSV) format.
The Apache Commons CSV library provides a simple interface for reading and writing
CSV files of various types.
Feature and bug fix release (Java 8)
Changes in this version include:
NEW FEATURES
==============
o CSV-233: Add predefined CSVFormats for printing MongoDB CSV and TSV. Thanks to Gary Gregory.
o CSV-234: Add support for java.sql.Clob. Thanks to Roberto Benedetti, Gary Gregory.
o CSV-239: Cannot get headers in column order from CSVRecord. Thanks to Gary Gregory, Dave Moten.
FIXED BUGS
============
o CSV-208: Fix escape character for POSTGRESQL_TEXT and POSTGRESQL_CSV formats. Thanks to Jurrie Overgoor.
o CSV-232: Site link "Source Repository" does not work. Thanks to Jurrie Overgoor, Gary Gregory.
o CSV-238: Escape quotes in CLOBs #39. Thanks to Stephen Olander-Waters.
CHANGES
=========
o CSV-237: Update to Java 8. Thanks to Gary Gregory.
o Update tests from H2 1.4.198 to 1.4.199. Thanks to Gary Gregory.
Historical list of changes: http://commons.apache.org/proper/commons-csv/changes-report.html
For complete information on Apache Commons CSV, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons CSV website:
http://commons.apache.org/proper/commons-csv/
Download it from http://commons.apache.org/proper/commons-csv/download_csv.cgi
Have fun!
-Apache Commons CSV team
------------------------------------------------------------------------------
Apache Commons CSV
Version 1.6
Release Notes
INTRODUCTION:
......@@ -53,8 +106,8 @@ Have fun!
------------------------------------------------------------------------------
Apache Commons CSV
Version 1.5
Release Notes
Version 1.5
Release Notes
INTRODUCTION:
......@@ -110,8 +163,8 @@ Have fun!
------------------------------------------------------------------------------
Apache Commons CSV
Version 1.4
Release Notes
Version 1.4
Release Notes
INTRODUCTION:
......@@ -154,8 +207,8 @@ Have fun!
------------------------------------------------------------------------------
Apache Commons CSV
Version 1.3
Release Notes
Version 1.3
Release Notes
INTRODUCTION:
......@@ -193,7 +246,7 @@ o CSV-161: Fix Javadoc to say CSVFormat with() methods return a new CSVFormat.
CHANGES
============
o CSV-167: Comment line hides next record; update Javadoc to make behaviour clear. Thanks to Rene.
o CSV-167: Comment line hides next record; update Javadoc to make behavior clear. Thanks to Rene.
o CSV-153: CSVPrinter doesn't skip creation of header record if skipHeaderRecord is set to true. Thanks to Wren.
......@@ -203,8 +256,8 @@ Have fun!
------------------------------------------------------------------------------
Apache Commons CSV
Version 1.2
Release Notes
Version 1.2
Release Notes
INTRODUCTION:
......@@ -246,8 +299,8 @@ Have fun!
------------------------------------------------------------------------------
Apache Commons CSV
Version 1.1
Release Notes
Version 1.1
Release Notes
INTRODUCTION:
......@@ -292,8 +345,8 @@ Have fun!
-------------------------------------------------------------------------------
Apache Commons CSV
Version 1.0
Release Notes
Version 1.0
Release Notes
INTRODUCTION:
......
This diff is collapsed.
This diff is collapsed.
......@@ -24,6 +24,7 @@ import static org.apache.commons.csv.Constants.SP;
import java.io.Closeable;
import java.io.Flushable;
import java.io.IOException;
import java.sql.Clob;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Arrays;
......@@ -379,7 +380,8 @@ public final class CSVPrinter implements Flushable, Closeable {
final int columnCount = resultSet.getMetaData().getColumnCount();
while (resultSet.next()) {
for (int i = 1; i <= columnCount; i++) {
print(resultSet.getObject(i));
final Object object = resultSet.getObject(i);
print(object instanceof Clob ? ((Clob) object).getCharacterStream() : object);
}
println();
}
......
......@@ -19,8 +19,8 @@ package org.apache.commons.csv;
import java.io.Serializable;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
......@@ -39,20 +39,20 @@ public final class CSVRecord implements Serializable, Iterable<String> {
/** The accumulated comments (if any) */
private final String comment;
/** The column name to index mapping. */
private final Map<String, Integer> mapping;
/** The record number. */
private final long recordNumber;
/** The values of the record */
private final String[] values;
CSVRecord(final String[] values, final Map<String, Integer> mapping, final String comment, final long recordNumber,
/** The parser that originates this record. */
private final CSVParser parser;
CSVRecord(final CSVParser parser, final String[] values, final String comment, final long recordNumber,
final long characterPosition) {
this.recordNumber = recordNumber;
this.values = values != null ? values : EMPTY_STRING_ARRAY;
this.mapping = mapping;
this.parser = parser;
this.comment = comment;
this.characterPosition = characterPosition;
}
......@@ -93,14 +93,15 @@ public final class CSVRecord implements Serializable, Iterable<String> {
* @see CSVFormat#withNullString(String)
*/
public String get(final String name) {
if (mapping == null) {
final Map<String, Integer> headerMap = getHeaderMapRaw();
if (headerMap == null) {
throw new IllegalStateException(
"No header mapping was specified, the record values can't be accessed by name");
}
final Integer index = mapping.get(name);
final Integer index = headerMap.get(name);
if (index == null) {
throw new IllegalArgumentException(String.format("Mapping for %s not found, expected one of %s", name,
mapping.keySet()));
headerMap.keySet()));
}
try {
return values[index.intValue()];
......@@ -133,6 +134,20 @@ public final class CSVRecord implements Serializable, Iterable<String> {
return comment;
}
private Map<String, Integer> getHeaderMapRaw() {
return parser.getHeaderMapRaw();
}
/**
* Returns the parser.
*
* @return the parser.
* @since 1.7
*/
public CSVParser getParser() {
return parser;
}
/**
* Returns the number of this record in the parsed CSV file.
*
......@@ -148,20 +163,6 @@ public final class CSVRecord implements Serializable, Iterable<String> {
return recordNumber;
}
/**
* Tells whether the record size matches the header size.
*
* <p>
* Returns true if the sizes for this record match and false if not. Some programs can export files that fail this
* test but still produce parsable files.
* </p>
*
* @return true of this record is valid, false if not
*/
public boolean isConsistent() {
return mapping == null || mapping.size() == values.length;
}
/**
* Checks whether this record has a comment, false otherwise.
* Note that comments are attached to the following record.
......@@ -175,6 +176,21 @@ public final class CSVRecord implements Serializable, Iterable<String> {
return comment != null;
}
/**
* Tells whether the record size matches the header size.
*
* <p>
* Returns true if the sizes for this record match and false if not. Some programs can export files that fail this
* test but still produce parsable files.
* </p>
*
* @return true of this record is valid, false if not
*/
public boolean isConsistent() {
final Map<String, Integer> headerMap = getHeaderMapRaw();
return headerMap == null || headerMap.size() == values.length;
}
/**
* Checks whether a given column is mapped, i.e. its name has been defined to the parser.
*
......@@ -183,7 +199,8 @@ public final class CSVRecord implements Serializable, Iterable<String> {
* @return whether a given column is mapped.
*/
public boolean isMapped(final String name) {
return mapping != null && mapping.containsKey(name);
final Map<String, Integer> headerMap = getHeaderMapRaw();
return headerMap != null && headerMap.containsKey(name);
}
/**
......@@ -194,7 +211,7 @@ public final class CSVRecord implements Serializable, Iterable<String> {
* @return whether a given columns is mapped and has a value
*/
public boolean isSet(final String name) {
return isMapped(name) && mapping.get(name).intValue() < values.length;
return isMapped(name) && getHeaderMapRaw().get(name).intValue() < values.length;
}
/**
......@@ -215,10 +232,10 @@ public final class CSVRecord implements Serializable, Iterable<String> {
* @return the given map.
*/
<M extends Map<String, String>> M putIn(final M map) {
if (mapping == null) {
if (getHeaderMapRaw() == null) {
return map;
}
for (final Entry<String, Integer> entry : mapping.entrySet()) {
for (final Entry<String, Integer> entry : getHeaderMapRaw().entrySet()) {
final int col = entry.getValue().intValue();
if (col < values.length) {
map.put(entry.getKey(), values[col]);
......@@ -248,12 +265,12 @@ public final class CSVRecord implements Serializable, Iterable<String> {
}
/**
* Copies this record into a new Map. The new map is not connect
* Copies this record into a new Map of header name to record value.
*
* @return A new Map. The map is empty if the record has no headers.
*/
public Map<String, String> toMap() {
return putIn(new HashMap<String, String>(values.length));
return putIn(new LinkedHashMap<String, String>(values.length));
}
/**
......@@ -264,9 +281,8 @@ public final class CSVRecord implements Serializable, Iterable<String> {
*/
@Override
public String toString() {
return "CSVRecord [comment=" + comment + ", mapping=" + mapping +
", recordNumber=" + recordNumber + ", values=" +
Arrays.toString(values) + "]";
return "CSVRecord [comment='" + comment + "', recordNumber=" + recordNumber + ", values=" +
Arrays.toString(values) + "]";
}
String[] values() {
......
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.csv;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.nio.CharBuffer;
/** Copied from Apache Commons IO. */
class IOUtils {
/**
* <p>
* Copied from Apache Commons IO.
* </p>
* The default buffer size ({@value}).
*/
static final int DEFAULT_BUFFER_SIZE = 1024 * 4;
/**
* <p>
* Copied from Apache Commons IO.
* </p>
* Represents the end-of-file (or stream).
* @since 2.5 (made public)
*/
private static final int EOF = -1;
/**
* Copies chars from a large (over 2GB) <code>Reader</code> to an <code>Appendable</code>.
* <p>
* This method buffers the input internally, so there is no need to use a
* <code>BufferedReader</code>.
* </p>
* The buffer size is given by {@link #DEFAULT_BUFFER_SIZE}.
*
* @param input the <code>Reader</code> to read from
* @param output the <code>Appendable</code> to append to
* @return the number of characters copied
* @throws NullPointerException if the input or output is null
* @throws IOException if an I/O error occurs
* @since 2.7
*/
static long copy(final Reader input, final Appendable output) throws IOException {
return copy(input, output, CharBuffer.allocate(DEFAULT_BUFFER_SIZE));
}
/**
* Copies chars from a large (over 2GB) <code>Reader</code> to an <code>Appendable</code>.
* <p>
* This method uses the provided buffer, so there is no need to use a
* <code>BufferedReader</code>.
* </p>
*
* @param input the <code>Reader</code> to read from
* @param output the <code>Appendable</code> to write to
* @param buffer the buffer to be used for the copy
* @return the number of characters copied
* @throws NullPointerException if the input or output is null
* @throws IOException if an I/O error occurs
* @since 2.7
*/
static long copy(final Reader input, final Appendable output, final CharBuffer buffer) throws IOException {
long count = 0;
int n;
while (EOF != (n = input.read(buffer))) {
buffer.flip();
output.append(buffer, 0, n);
count += n;
}
return count;
}
/**
* <p>
* Copied from Apache Commons IO.
* </p>
* Copies chars from a large (over 2GB) <code>Reader</code> to a <code>Writer</code>.
* <p>
* This method buffers the input internally, so there is no need to use a
* <code>BufferedReader</code>.
* <p>
* The buffer size is given by {@link #DEFAULT_BUFFER_SIZE}.
*
* @param input the <code>Reader</code> to read from
* @param output the <code>Writer</code> to write to
* @return the number of characters copied
* @throws NullPointerException if the input or output is null
* @throws IOException if an I/O error occurs
* @since 1.3
*/
static long copyLarge(final Reader input, final Writer output) throws IOException {
return copyLarge(input, output, new char[DEFAULT_BUFFER_SIZE]);
}
/**
* <p>
* Copied from Apache Commons IO.
* </p>
* Copies chars from a large (over 2GB) <code>Reader</code> to a <code>Writer</code>.
* <p>
* This method uses the provided buffer, so there is no need to use a
* <code>BufferedReader</code>.
* <p>
*
* @param input the <code>Reader</code> to read from
* @param output the <code>Writer</code> to write to
* @param buffer the buffer to be used for the copy
* @return the number of characters copied
* @throws NullPointerException if the input or output is null
* @throws IOException if an I/O error occurs
* @since 2.2
*/
static long copyLarge(final Reader input, final Writer output, final char[] buffer) throws IOException {
long count = 0;
int n;
while (EOF != (n = input.read(buffer))) {
output.write(buffer, 0, n);
count += n;
}
return count;
}
}
......@@ -34,28 +34,19 @@
</menu>
<menu name="Development">
<item name="History" href="/changes-report.html"/>
<item name="Mailing Lists" href="/mail-lists.html"/>
<item name="Issue Tracking" href="/issue-tracking.html"/>
<item name="Team" href="/team-list.html"/>
<item name="Source Repository" href="/source-repository.html"/>
<item name="Javadoc trunk" href="/apidocs/index.html"/>
<item name="Javadoc 1.6" href="/archives/1.6/apidocs/index.html"/>
<item name="Javadoc 1.5" href="/archives/1.5/apidocs/index.html"/>
<item name="Javadoc 1.4" href="/archives/1.4/apidocs/index.html"/>
<item name="Javadoc 1.3" href="/archives/1.3/apidocs/index.html"/>
<item name="Javadoc 1.2" href="/archives/1.2/apidocs/index.html"/>
<item name="Javadoc 1.1" href="/archives/1.1/apidocs/index.html"/>
<item name="Javadoc 1.0" href="/archives/1.0/apidocs/index.html"/>
</menu>
<menu name="Site Archives">
<item name="CSV 1.5" href="/archives/1.5/index.html"/>
<item name="CSV 1.4" href="/archives/1.4/index.html"/>
<item name="CSV 1.3" href="/archives/1.3/index.html"/>
<item name="CSV 1.2" href="/archives/1.2/index.html"/>
<item name="CSV 1.1" href="/archives/1.1/index.html"/>
<item name="CSV 1.0" href="/archives/1.0/index.html"/>
<item name="History" href="/changes-report.html"/>
<item name="Mailing Lists" href="/mail-lists.html"/>
<item name="Issue Tracking" href="/issue-tracking.html"/>
<item name="Team" href="/team.html"/>
<item name="Javadoc" href="/apidocs/index.html"/>
<item name="Javadoc 1.7" href="https://javadoc.io/doc/org.apache.commons/commons-csv/1.7"/>
<item name="Javadoc 1.6" href="https://javadoc.io/doc/org.apache.commons/commons-csv/1.6"/>
<item name="Javadoc 1.5" href="https://javadoc.io/doc/org.apache.commons/commons-csv/1.5"/>
<item name="Javadoc 1.4" href="https://javadoc.io/doc/org.apache.commons/commons-csv/1.4"/>
<item name="Javadoc 1.3" href="https://javadoc.io/doc/org.apache.commons/commons-csv/1.3"/>
<item name="Javadoc 1.2" href="https://javadoc.io/doc/org.apache.commons/commons-csv/1.2"/>
<item name="Javadoc 1.1" href="https://javadoc.io/doc/org.apache.commons/commons-csv/1.1"/>
<item name="Javadoc 1.0" href="https://javadoc.io/doc/org.apache.commons/commons-csv/1.0"/>
</menu>
</body>
......
......@@ -26,22 +26,24 @@ limitations under the License.
| commons-build-plugin/trunk/src/main/resources/commons-xdoc-templates |
+======================================================================+
| |
| 1) Re-generate using: mvn commons:download-page |
| 1) Re-generate using: mvn commons-build:download-page |
| |
| 2) Set the following properties in the component's pom: |
| - commons.componentid (required, alphabetic, lower case) |
| - commons.componentid (required, alphabetic, lower case) |
| - commons.release.version (required) |
| - commons.release.name (required) |
| - commons.binary.suffix (optional) |
| (defaults to "-bin", set to "" for pre-maven2 releases) |
| - commons.release.desc (optional) |
| - commons.release.subdir (optional) |
| - commons.release.hash (optional, lowercase, default sha512) |
| |
| - commons.release.2/3.version (conditional) |
| - commons.release.2/3.name (conditional) |
| - commons.release.2/3.binary.suffix (optional) |
| - commons.release.2/3.desc (optional) |
| - commons.release.2/3.subdir (optional) |
| - commons.release.[234].version (conditional) |
| - commons.release.[234].name (conditional) |
| - commons.release.[234].binary.suffix (optional) |
| - commons.release.[234].desc (optional) |
| - commons.release.[234].subdir (optional) |
| - commons.release.[234].hash (optional, lowercase, [sha512])|
| |
| 3) Example Properties |
| (commons.release.name inherited by parent: |
......@@ -102,7 +104,7 @@ limitations under the License.
It is essential that you
<a href="https://www.apache.org/info/verification.html">verify the integrity</a>
of downloaded files, preferably using the <code>PGP</code> signature (<code>*.asc</code> files);
failing that using the <code>SHA-512</code> hash (<code>*.sha512</code> checksum files).
failing that using the <code>SHA512</code> hash (<code>*.sha512</code> checksum files).
</p>
<p>
The <a href="https://www.apache.org/dist/commons/KEYS">KEYS</a>
......@@ -111,32 +113,32 @@ limitations under the License.
</p>
</subsection>
</section>
<section name="Apache Commons CSV 1.6 (Java 7+)">
<section name="Apache Commons CSV 1.7 (Java 8)">
<subsection name="Binaries">
<table>
<tr>
<td><a href="[preferred]/commons/csv/binaries/commons-csv-1.6-bin.tar.gz">commons-csv-1.6-bin.tar.gz</a></td>
<td><a href="https://www.apache.org/dist/commons/csv/binaries/commons-csv-1.6-bin.tar.gz.sha512">sha512</a></td>
<td><a href="https://www.apache.org/dist/commons/csv/binaries/commons-csv-1.6-bin.tar.gz.asc">pgp</a></td>
<td><a href="[preferred]/commons/csv/binaries/commons-csv-1.7-bin.tar.gz">commons-csv-1.7-bin.tar.gz</a></td>
<td><a href="https://www.apache.org/dist/commons/csv/binaries/commons-csv-1.7-bin.tar.gz.sha512">sha512</a></td>
<td><a href="https://www.apache.org/dist/commons/csv/binaries/commons-csv-1.7-bin.tar.gz.asc">pgp</a></td>
</tr>
<tr>
<td><a href="[preferred]/commons/csv/binaries/commons-csv-1.6-bin.zip">commons-csv-1.6-bin.zip</a></td>
<td><a href="https://www.apache.org/dist/commons/csv/binaries/commons-csv-1.6-bin.zip.sha512">sha512</a></td>
<td><a href="https://www.apache.org/dist/commons/csv/binaries/commons-csv-1.6-bin.zip.asc">pgp</a></td>
<td><a href="[preferred]/commons/csv/binaries/commons-csv-1.7-bin.zip">commons-csv-1.7-bin.zip</a></td>
<td><a href="https://www.apache.org/dist/commons/csv/binaries/commons-csv-1.7-bin.zip.sha512">sha512</a></td>
<td><a href="https://www.apache.org/dist/commons/csv/binaries/commons-csv-1.7-bin.zip.asc">pgp</a></td>
</tr>
</table>
</subsection>
<subsection name="Source">
<table>
<tr>
<td><a href="[preferred]/commons/csv/source/commons-csv-1.6-src.tar.gz">commons-csv-1.6-src.tar.gz</a></td>
<td><a href="https://www.apache.org/dist/commons/csv/source/commons-csv-1.6-src.tar.gz.sha512">sha512</a></td>
<td><a href="https://www.apache.org/dist/commons/csv/source/commons-csv-1.6-src.tar.gz.asc">pgp</a></td>
<td><a href="[preferred]/commons/csv/source/commons-csv-1.7-src.tar.gz">commons-csv-1.7-src.tar.gz</a></td>
<td><a href="https://www.apache.org/dist/commons/csv/source/commons-csv-1.7-src.tar.gz.sha512">sha512</a></td>
<td><a href="https://www.apache.org/dist/commons/csv/source/commons-csv-1.7-src.tar.gz.asc">pgp</a></td>
</tr>
<tr>
<td><a href="[preferred]/commons/csv/source/commons-csv-1.6-src.zip">commons-csv-1.6-src.zip</a></td>
<td><a href="https://www.apache.org/dist/commons/csv/source/commons-csv-1.6-src.zip.sha512">sha512</a></td>
<td><a href="https://www.apache.org/dist/commons/csv/source/commons-csv-1.6-src.zip.asc">pgp</a></td>
<td><a href="[preferred]/commons/csv/source/commons-csv-1.7-src.zip">commons-csv-1.7-src.zip</a></td>
<td><a href="https://www.apache.org/dist/commons/csv/source/commons-csv-1.7-src.zip.sha512">sha512</a></td>
<td><a href="https://www.apache.org/dist/commons/csv/source/commons-csv-1.7-src.zip.asc">pgp</a></td>
</tr>
</table>
</subsection>
......
......@@ -51,13 +51,13 @@ The Javadoc API documents are available online:
</p>
<ul>
<li><a href="apidocs/index.html">Javadoc trunk</a></li>
<li><a href="archives/1.6/apidocs/index.html">Javadoc 1.6</a></li>
<li><a href="archives/1.5/apidocs/index.html">Javadoc 1.5</a></li>
<li><a href="archives/1.4/apidocs/index.html">Javadoc 1.4</a></li>
<li><a href="archives/1.3/apidocs/index.html">Javadoc 1.3</a></li>
<li><a href="archives/1.2/apidocs/index.html">Javadoc 1.2</a></li>
<li><a href="archives/1.1/apidocs/index.html">Javadoc 1.1</a></li>
<li><a href="archives/1.0/apidocs/index.html">Javadoc 1.0</a></li>
<li><a href="https://javadoc.io/doc/org.apache.commons/commons-csv/1.6">Javadoc 1.6</a></li>
<li><a href="https://javadoc.io/doc/org.apache.commons/commons-csv/1.5">Javadoc 1.5</a></li>
<li><a href="https://javadoc.io/doc/org.apache.commons/commons-csv/1.4">Javadoc 1.4</a></li>
<li><a href="https://javadoc.io/doc/org.apache.commons/commons-csv/1.3">Javadoc 1.3</a></li>
<li><a href="https://javadoc.io/doc/org.apache.commons/commons-csv/1.2">Javadoc 1.2</a></li>
<li><a href="https://javadoc.io/doc/org.apache.commons/commons-csv/1.1">Javadoc 1.1</a></li>
<li><a href="https://javadoc.io/doc/org.apache.commons/commons-csv/1.0">Javadoc 1.0</a></li>
</ul>
<p>
The <a href="source-repository.html">git repository</a> can be
......@@ -67,13 +67,14 @@ The <a href="source-repository.html">git repository</a> can be
<!-- ================================================== -->
<section name="Releases">
<ul>