<?xml version="1.0"?>
<!--
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.
-->
<document>
 <properties>
  <title>Home</title>
  <author email="dev@commons.apache.org">Commons Documentation Team</author>
 </properties>
<body>
<!-- ================================================== -->
<section name="Using Apache Commons CSV">
  <p>Commons CSV reads and writes files in variations of the Comma Separated Value (CSV) format.</p>
  <p>The most common CSV formats are predefined in the <a href="apidocs/org/apache/commons/csv/CSVFormat.html">CSVFormat</a> class:
  <ul>
    <li>Microsoft Excel</li>
    <li><a href="http://www.ibm.com/support/knowledgecenter/SSBJG3_2.5.0/com.ibm.gen_busug.doc/c_fgl_InOutSql_UNLOAD.htm">Informix UNLOAD</a></li>
    <li><a href="http://www.ibm.com/support/knowledgecenter/SSBJG3_2.5.0/com.ibm.gen_busug.doc/c_fgl_InOutSql_UNLOAD.htm">Informix UNLOAD CSV</a></li>
    <li><a href="http://dev.mysql.com/doc/refman/5.0/en/mysqldump-delimited-text.html">MySQL</a></li>
    <li><a href="http://tools.ietf.org/html/rfc4180">RFC 4180</a></li>
    <li><a href="http://en.wikipedia.org/wiki/Tab-separated_values">TDF</a></li>
  </ul>
  </p>
  <p>Custom formats can be created using a fluent style API.</p>
</section>
<!-- ================================================== -->
<section name="Documentation">
<p>
An overview of the functionality is provided in the
<a href="user-guide.html">user guide</a>.
Various <a href="project-reports.html">project reports</a> are also available.
</p>
<p>
The Javadoc API documents are available online:
</p>
<ul>
  <li><a href="apidocs/index.html">Javadoc trunk</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>
</ul>
<p>
The <a href="source-repository.html">git repository</a> can be
<a href="https://git-wip-us.apache.org/repos/asf?p=commons-csv.git">browsed</a>.
</p>
</section>
<!-- ================================================== -->
<section name="Releases">
<ul>
  <li><a href="http://commons.apache.org/csv/download_csv.cgi">Apache Commons CSV 1.4 (mirrors)</a> requires Java 1.6</li>
  <li><a href="http://archive.apache.org/dist/commons/csv/">Apache Commons CSV 1.3 (archives)</a> requires Java 1.6</li>
  <li><a href="http://archive.apache.org/dist/commons/csv/">Apache Commons CSV 1.2 (archives)</a> requires Java 1.6</li>
  <li><a href="http://archive.apache.org/dist/commons/csv/">Apache Commons CSV 1.1 (archives)</a> requires Java 1.6</li>
  <li><a href="http://archive.apache.org/dist/commons/csv/">Apache Commons CSV 1.0 (archives)</a> requires Java 1.6</li>
</ul>
<p>
See the
<a href="http://commons.apache.org/csv/download_csv.cgi">Download Page</a>
for the latest releases.<br />
</p>
<p>
<a href="changes-report.html">Change reports</a> are also available.
</p>
<p>
For previous releases, see the <a href="http://archive.apache.org/dist/commons/csv/">Apache Archive</a>
</p>
<p>
  Alternatively, you can pull it from a Maven repository:
  <pre>&lt;dependency&gt;
    &lt;groupId&gt;org.apache.commons&lt;/groupId&gt;
    &lt;artifactId&gt;commons-csv&lt;/artifactId&gt;
    &lt;version&gt;1.3&lt;/version&gt;
&lt;/dependency&gt;</pre>
</p>
<p>
  For other dependency access methods, see <a href="dependency-info.html">Dependency Information</a>
</p>
</section>

<section name="Building from sources">
  <p>The latest code can be checked out from our git repository at <a href="https://git-wip-us.apache.org/repos/asf/commons-csv.git">https://git-wip-us.apache.org/repos/asf/commons-csv.git</a>.
    You can build the component using Apache Maven using <code>mvn clean package</code>.
  </p>
</section>
<!-- ================================================== -->
<section name="Getting Involved">
  <p>
    The <a href="mail-lists.html">commons developer mailing list</a> is the main channel of communication for contributors. Please remember that the lists are shared between all commons components, so prefix your email by [csv]. </p>
  <p>You can also visit the #apache-commons IRC channel on irc.freenode.net or peruse <a href="issue-tracking.html">JIRA</a>. Specific links of interest for JIRA are:</p>
  <ul>
    <li>Ideas looking for code: <a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20CSV%20AND%20resolution%20%3D%20Unresolved%20AND%20fixVersion%20%3D%20%22Patch%20Needed%22">Patch Needed</a></li>
    <li>Issues with patches, looking for reviews: <a href="https://issues.apache.org/jira/issues/?jql=project%20%3D%20CSV%20AND%20resolution%20%3D%20Unresolved%20AND%20fixVersion%20%3D%20Review">Review Patch</a></li>
  </ul>
  <p>Alternatively you can go through the <em>Needs Work</em> tags in the <a href="taglist.html">TagList report</a>.</p>
  <p>If you'd like to offer up pull requests via GitHub rather than applying patches to JIRA, we have a <a href="https://github.com/apache/commons-csv/">GitHub mirror</a>. </p>
</section>
<!-- ================================================== -->
<section name="Support">
  <p>
    The <a href="mail-lists.html">commons mailing lists</a> act as the main support forum.
    The user list is suitable for most library usage queries.
    The dev list is intended for the development discussion.
    Please remember that the lists are shared between all commons components,
    so prefix your email by [csv].
  </p>
  <p>
    Bug reports and enhancements are also welcomed via the <a href="issue-tracking.html">JIRA</a> issue tracker.
    Please read the instructions carefully.
  </p>
</section>
<!-- ================================================== -->

<section name="About Commons CSV">
  <p>Commons CSV was started to unify a common and simple interface for reading and writing CSV files under an ASL license. It has been bootstrapped by a code donation from Netcetera in Switzerland. There are three pre-existing BSD compatible CSV parsers which this component will hopefully make redundant (authors willing): </p>
  <ul>
    <li><a href="http://kasparov.skife.org/csv/">Skife CSV</a></li>
    <li><a href="http://opencsv.sourceforge.net/">Open CSV</a></li>
    <li><a href="http://www.osjava.org/genjava/multiproject/gj-csv/">Genjava CSV</a></li>
  </ul>
  <p>In addition to the code from Netcetera (org.apache.commons.csv), Martin van den Bemt has added an additional writer API. </p>
  <p>Other CSV implementations: </p>
  <ul>
    <li><a href="http://supercsv.sourceforge.net/">Super CSV</a></li>
  </ul>
</section>

<!-- ================================================== -->
</body>
</document>
