Apache Commons logo Apache Commons CSV™ logo

Apache Commons CSV Release Notes

Release History

Version Date Description
1.9.0 2020-07-24 Feature and bug fix release (Java 8)
1.8 2020-02-01 Feature and bug fix release (Java 8). This release fixes serialization compatibility of CSVRecord with versions 1.0 to 1.6. New fields added since 1.7 are not serialized. Support for Serializable is scheduled to be removed in version 2.0.
1.7 2019-06-01 Feature and bug fix release (Java 8)
1.6 2018-09-22 Feature and bug fix release (Java 7)
1.5 2017-09-03 Feature and bug fix release (Java 7)
1.4 2016-05-28 Feature and bug fix release (Java 6)
1.3 2016-05-09 Feature and bug fix release (Java 6)
1.2 2015-08-24 Feature and bug fix release (Java 6)
1.1 2014-11-16 Feature and bug fix release (Java 6)
1.0 2014-08-14 First release (Java 6)

Release 1.9.0 – 2020-07-24

Type Changes By
Fix Replace FindBugs with SpotBugs #56. Thanks to Amey Jadiye. ggregory
Fix Javadoc typo in CSVFormat let's -> lets #57. Thanks to Chen. ggregory
Fix CSVFormat.printWithEscapes throws StringIndexOutOfBoundsException when value is Reader #61. Fixes CSV-259. Thanks to Chen. ggregory
Fix Improve CSVFormat test coverage #63. Thanks to Chen. ggregory
Fix Fix CSVFileParserTest.java to allow for a null return value from record.getComment() #62. Thanks to Chen. ggregory
Fix Improve test coverage in CSVFormatTest #65. Thanks to Chen. ggregory
Fix Removed invalid Javadoc markup for CSVFormat EXCEL #64. Thanks to Chen. ggregory
Fix Improve CSVRecord and CSVPrinter code coverage #66. Thanks to Chen. ggregory
Fix Improve lexer and token coverage #67. Thanks to Chen. ggregory
Fix CSVFormat.format trims last delimiter if the delimiter is a white space #71. Fixes CSV-211. Thanks to Alpesh Kulkarni, Chen. ggregory
Fix Replace org.apache.commons.csv.Assertions.notNull() with Objects.requireNonNull(). Thanks to Gary Gregory. ggregory
Fix Line number is not proper at EOF. Fixes CSV-149. Thanks to Kranthi, Gary Gregory, Brent Worden, dota17. ggregory
Fix Parser iterates over the last CSV Record twice. Fixes CSV-195. Thanks to Rodolfo Duldulao, Rodolfo Duldulao, Michael Vitz, dota17. ggregory
Fix Minor improvements #126, #127, #130. Fixes CSV-267. Thanks to Arturo Bernal. ggregory
Fix Add possibility to use ResultSet header meta data as CSV header #11. Fixes CSV-123. Thanks to Emmanuel Bourg, Benedikt Ritter, shivakrishnaah, Gary Gregory. ggregory
Fix Add test cases for withIgnoreSurroundingSpaces() and withTrim() #70. Fixes CSV-148. Thanks to dota17. ggregory
Fix Update CSVParser.parse(File, Charset, CSVFormat) from IO to NIO. Thanks to Gary Gregory. ggregory
Fix Missing separator with print(object) followed by printRecord(Object[]) #157. Fixes CSV-271. Thanks to Amar Prakash Pandey. ggregory
Fix Fix EOL checking for read array in ExtendedBufferedReader #5. Fixes CSV-158. Thanks to Alexander Bondarev, Benedikt Ritter, Gary Gregory, Chen. ggregory
Fix Print from Reader with embedded quotes generates incorrect output #78. Fixes CSV-263. Thanks to Jason A. Guild, Gary Gregory. ggregory
Fix Replace JUnit assert by simpler but equivalent calls. #159. Thanks to Arturo Bernal. ggregory
Fix Update gitignore to ignore idea and vscode #160. Thanks to Seth Falco. ggregory
Fix Update CSVBenchmark #165. Fixes CSV-281. Thanks to belugabehr. ggregory
Fix Remove Whitespace Check Determines Delimiter Twice #167. Fixes CSV-283. Thanks to belugabehr. ggregory
Fix Document and Automate CSV Benchmark Harness #166. Fixes CSV-283. Thanks to belugabehr. ggregory
Fix Optimize Lexer Delimiter Check for One Character Delimiter #163. Fixes CSV-279. Thanks to belugabehr. ggregory
Fix SpotBugs Error: Medium: org.apache.commons.csv.CSVParser.getHeaderNames() may expose internal representation by returning CSVParser.headerNames [org.apache.commons.csv.CSVParser] At CSVParser.java:[line 599] EI_EXPOSE_REP. Thanks to Gary Gregory. ggregory
Fix SpotBugs Error: Medium: new org.apache.commons.csv.CSVParser(Reader, CSVFormat, long, long) may expose internal representation by storing an externally mutable object into CSVParser.format [org.apache.commons.csv.CSVParser] At CSVParser.java:[line 433] EI_EXPOSE_REP2. Thanks to Gary Gregory. ggregory
Fix SpotBugs Error: Medium: new org.apache.commons.csv.CSVParser(Reader, CSVFormat, long, long) may expose internal representation by storing an externally mutable object into CSVParser.headerMap [org.apache.commons.csv.CSVParser] At CSVParser.java:[line 437] EI_EXPOSE_REP2. Thanks to Gary Gregory. ggregory
Fix SpotBugs Error: Medium: new org.apache.commons.csv.CSVParser(Reader, CSVFormat, long, long) may expose internal representation by storing an externally mutable object into CSVParser.headerNames [org.apache.commons.csv.CSVParser] At CSVParser.java:[line 438] EI_EXPOSE_REP2. Thanks to Gary Gregory. ggregory
Fix SpotBugs Error: Medium: new org.apache.commons.csv.CSVPrinter(Appendable, CSVFormat) may expose internal representation by storing an externally mutable object into CSVPrinter.format [org.apache.commons.csv.CSVPrinter] At CSVPrinter.java:[line 100] EI_EXPOSE_REP2. Thanks to Gary Gregory. ggregory
Fix Formalize PerformanceTest #168. Fixes CSV-284. Thanks to belugabehr. ggregory
Fix Reuse Buffers in Lexer for Delimiter Detection #162. Fixes CSV-278. Thanks to belugabehr. ggregory
Fix Cleanup and Document Performance Test Harness #170. Fixes CSV-286. Thanks to belugabehr. ggregory
Fix Update buffer position when reading line comment #120. Fixes CSV-265. Thanks to belugabehr. ggregory
Add Make CSVRecord#toList() public. Fixes CSV-275. Thanks to Michael Wyraz, Gary Gregory. ggregory
Add Add CSVRecord#stream(). Thanks to Gary Gregory. ggregory
Add Add CSVParser#stream(). Thanks to Gary Gregory. ggregory
Add Make the method CSVRecord.putIn(Map) public. Fixes CSV-184. Thanks to Gaurav Agarwal, M. Steiger, Gary Gregory. ggregory
Add Add test cases for CSVRecord with get(Enum) and toString. #54. Thanks to dota17. ggregory
Add Add and use CSVFormat.Builder, deprecated CSVFormat#with methods, based on #73. Thanks to Gary Gregory, dota17. ggregory
Add Add support for String delimiters #76. Fixes CSV-206. Thanks to Gary Gregory, dota17. ggregory
Update Update org.junit.jupiter:junit-jupiter from 5.6.0 to 5.7.0, #84 #109 Thanks to Gary Gregory. ggregory
Update Update tests from Apache Commons Lang 3.9 to 3.12.0. Thanks to Gary Gregory. ggregory
Update Update tests from commons-io:commons-io 2.6 to 2.11.0, #108. Thanks to Gary Gregory. ggregory
Update Bump actions/checkout from v1 to v2.3.4, #79, #92, #121. Thanks to Dependabot. ggregory
Update Bump commons-parent from 50 to 51 #80. Thanks to Dependabot. ggregory
Update Bump tests from opencsv from 3.1 to 5.5.1 #81, #137, #158. Thanks to Dependabot, Gary Gregory. ggregory
Update Update tests from super-csv from 2.2.1 to 2.4.0 #86. Thanks to Gary Gregory. ggregory
Update Bump build actions/setup-java from v1.4.0 to v2, #101, #113. Thanks to Dependabot, Gary Gregory. ggregory
Update Bump maven-pmd-plugin from 3.13.0 to 3.14.0 #122. Thanks to Dependabot. ggregory
Update Bump tests from org.mockito:mockito-core 3.2.4 -> 3.11.2; #88, #107, #110, #123, #128, #129, #156. Thanks to Gary Gregory, Dependabot. ggregory
Update Bump actions/cache from v2 to v2.1.6 #132, #153. Thanks to Dependabot. ggregory
Update Bump maven-checkstyle-plugin from 3.0.0 to 3.1.2 #131. Thanks to Gary Gregory, Dependabot. ggregory
Update Bump checkstyle from 8.29 to 8.44. Thanks to Gary Gregory. ggregory
Update Bump junit-jupiter from 5.7.0 to 5.8.0-M1 #133, #149. Thanks to Dependabot, Gary Gregory. ggregory
Update Bump commons.jacoco.version from 0.8.5 to 0.8.7 (Java 16). Thanks to Dependabot. ggregory
Update Bump commons.spotbugs.version from 4.0.4 to 4.3.0 (Java 16). Thanks to Dependabot. ggregory
Update Bump maven-javadoc-plugin from 3.2.0 to 3.3.0. Thanks to Gary Gregory. ggregory
Update Bump jmh-generator-annprocess from 1.5.2 to 1.32 #151. Thanks to Dependabot. ggregory
Update Bump PMD core from 6.29.0 to 6.36.0. Thanks to Dependabot. ggregory
Update Bump biz.aQute.bnd:biz.aQute.bndlib from 5.1.2 to 5.3.0. Thanks to Dependabot. ggregory

Release 1.8 – 2020-02-01

Type Changes By
Add Add CSVRecord.isSet(int) method #52. Fixes CSV-255. Thanks to 0x100. ggregory
Fix Char escape doesn't work properly with quoting. Fixes CSV-135. Thanks to Mateusz Zakarczemny. sebb
Fix Test case failures following CSVFormat#equals() update. Fixes CSV-244. sebb
Fix CSVFormat withTrim() and withIgnoreSurroundingSpaces() need better docs. Fixes CSV-243. sebb
Fix CSVFormat equals() and hashCode() don't use all fields. Fixes CSV-242. sebb
Fix CSVFormat#validate() does not account for allowDuplicateHeaderNames #43. Fixes CSV-241. Thanks to LuckyIlam, Gary Gregory. ggregory
Fix Post 1.7 release fixes. Fixes CSV-245. Thanks to Alex Herbert. ggregory
Fix Upgrade test framework to JUnit 5 Jupiter #49, #50. Fixes CSV-252. Thanks to Alex Herbert. ggregory
Fix A single empty header is allowed when not allowing empty column headers. #47. Fixes CSV-247. Thanks to Alex Herbert, Gary Gregory. ggregory
Fix CSVRecord is not Serializable. Fixes CSV-248. Thanks to Alex Herbert. ggregory
Fix Use test scope for supercsv #48. Thanks to Alex Herbert. ggregory
Update Update tests from H2 1.4.199 to 1.4.200. Thanks to Gary Gregory. ggregory
Update Update tests from Hamcrest 2.1 to 2.2. Thanks to Gary Gregory. ggregory
Update Update tests from Mockito 3.1.0 to 3.2.4. Thanks to Gary Gregory. ggregory
Update Fix typos in site and test #53. Thanks to Chen. ggregory
Update Fix typo performance test #55. Thanks to Chen. ggregory

Release 1.7 – 2019-06-01

Type Changes By
Add Add predefined CSVFormats for printing MongoDB CSV and TSV. Fixes CSV-233. Thanks to Gary Gregory. ggregory
Fix Fix escape character for POSTGRESQL_TEXT and POSTGRESQL_CSV formats. Fixes CSV-208. Thanks to Jurrie Overgoor. ggregory
Fix Site link "Source Repository" does not work. Fixes CSV-232. Thanks to Jurrie Overgoor, Gary Gregory. ggregory
Add Add support for java.sql.Clob. Fixes CSV-234. Thanks to Roberto Benedetti, Gary Gregory. ggregory
Update Update to Java 8. Fixes CSV-237. Thanks to Gary Gregory. ggregory
Fix Escape quotes in CLOBs #39. Fixes CSV-238. Thanks to Stephen Olander-Waters. ggregory
Add Cannot get headers in column order from CSVRecord. Fixes CSV-239. Thanks to Gary Gregory, Dave Moten. ggregory
Update Update tests from H2 1.4.198 to 1.4.199. Thanks to Gary Gregory. ggregory

Release 1.6 – 2018-09-22

Type Changes By
Update Add more documentation to CSVPrinter. Fixes CSV-231. britter
Add Add autoFlush option for CsvPrinter. PR #24. Fixes CSV-217. Thanks to Korolyov Alexei. ggregory
Fix The behavior of quote char using is not similar as Excel does when the first string contains CJK char(s). Fixes CSV-219. Thanks to Zhang Hongda. ggregory
Fix Don't quote cells just because they have UTF-8 encoded characters. Fixes CSV-172. Thanks to Andrew Pennebaker. ggregory
Add Add API org.apache.commons.csv.CSVFormat.withSystemRecordSeparator(). Fixes CSV-220. Thanks to Gary Gregory. ggregory
Fix Inconsistency between Javadoc of CSVFormat DEFAULT EXCEL. Fixes CSV-223. Thanks to Samuel Martin. ggregory
Fix Create CSVFormat.ORACLE preset. Fixes CSV-209. Thanks to Gary Gregory. ggregory
Fix Some multi-iterator parsing peek sequences incorrectly consume elements. Fixes CSV-224. Thanks to David Warshaw. ggregory
Fix Parse method should avoid creating a redundant BufferedReader. Fixes CSV-225. Thanks to Anson Schwabecher. ggregory
Fix Add predefined CSVFormats for printing MongoDB CSV and TSV. Fixes CSV-233. Thanks to Gary Gregory. ggregory

Release 1.5 – 2017-09-03

Type Changes By
Fix withNullString value is printed without quotes when QuoteMode.ALL is specified; add QuoteMode.ALL_NON_NULL. PR #17. Fixes CSV-203. Thanks to Richard Wheeldon, Kai Paroth. ggregory
Fix Fix outdated comments about FileReader in CSVParser #13. Fixes CSV-194. Thanks to Marc Prud'hommeaux. ggregory
Fix Fix incorrect method name 'withFirstRowAsHeader' in user guide. Fixes CSV-193. Thanks to Matthias Wiehl. ggregory
Fix Negative numeric values in the first column are always quoted in minimal mode. Fixes CSV-171. Thanks to Gary Gregory, Michael Graessle, Adrian Bridgett. ggregory
Update Update platform requirement from Java 6 to 7. Fixes CSV-187. Thanks to Gary Gregory. ggregory
Update Do not use RuntimeException in CSVParser.iterator().new Iterator() {...}.getNextRecord(). Fixes CSV-201. Thanks to Benedikt Ritter, Gary Gregory. ggregory
Add CSVParser: Add factory method accepting InputStream. Fixes CSV-189. Thanks to Peter Holzwarth, Gary Gregory. ggregory
Add Add convenience API CSVFormat.print(File, Charset). Fixes CSV-190. Thanks to Gary Gregory. ggregory
Add Add convenience API CSVFormat.print(Path, Charset). Fixes CSV-191. Thanks to Gary Gregory. ggregory
Add Add convenience API CSVParser.parse(Path, Charset, CSVFormat). Fixes CSV-192. Thanks to Gary Gregory. ggregory
Add Add convenience API CSVFormat#printer() to print to System.out. Fixes CSV-205. Thanks to Gary Gregory. ggregory
Add Provide a CSV Format for printing PostgreSQL CSV and Text formats. Fixes CSV-207. Thanks to Gary Gregory. ggregory
Add Adding a placeholder in the Lexer and CSV parser to store the end-of-line string. Fixes CSV-214. Thanks to Nitin Mahendru, Gary Gregory. ggregory

Release 1.4 – 2016-05-28

Type Changes By
Update Make CSVPrinter.print(Object) GC-free. Fixes CSV-181. Thanks to Gary Gregory. ggregory
Add Allow some printing operations directly from CSVFormat. Fixes CSV-182. Thanks to Gary Gregory. ggregory
Update Drop ferc.gov tests. Fixes CSV-183. ggregory

Release 1.3 – 2016-05-09

Type Changes By
Add Add shortcut method for using first record as header to CSVFormat. Fixes CSV-179. britter
Add Add withHeader(Class<? extends Enum>) to CSVFormat. Fixes CSV-180. britter
Update Comment line hides next record; update Javadoc to make behavior clear. Fixes CSV-167. Thanks to Rene. sebb
Update CSVPrinter doesn't skip creation of header record if skipHeaderRecord is set to true. Fixes CSV-153. Thanks to Wren. britter
Add Add IgnoreCase option for accessing header names. Fixes CSV-159. Thanks to Yamil Medina. ggregory
Add The null string should be case-sensitive when reading records. Fixes CSV-169. Thanks to Gary Gregory. ggregory
Fix CSVFormat.nullString should not be escaped. Fixes CSV-168. Thanks to Gary Gregory, cornel creanga. ggregory
Fix CSVFormat.MYSQL nullString should be "\N". Fixes CSV-170. Thanks to Gary Gregory, cornel creanga. ggregory
Fix Fix Javadoc to say CSVFormat with() methods return a new CSVFormat. Fixes CSV-161. Thanks to Gary Gregory, Kristof Meixner, Emmanuel Bourg. ggregory
Add Support for ignoring trailing delimiter. Fixes CSV-175. Thanks to Gary Gregory, Chris Jones. ggregory
Add Support trimming leading and trailing blanks. Fixes CSV-177. Thanks to Gary Gregory. ggregory
Add Create default formats for Informix UNLOAD and UNLOAD CSV. Fixes CSV-178. Thanks to Gary Gregory. ggregory

Release 1.2 – 2015-08-24

Type Changes By
Fix CSVFormat.with* methods clear the header comments. Fixes CSV-145. Thanks to Frank Ulbricht. ggregory
Fix Incorrect Javadoc on QuoteMode.NONE. Fixes CSV-156. Thanks to Jason Steenstra-Pickens. ggregory
Add Add enum CSVFormat.Predefined that contains the default CSVFormat values. Fixes CSV-157. ggregory

Release 1.1 – 2014-11-16

Type Changes By
Fix QuoteMode.NON_NUMERIC doesn't work with CSVPrinter.printRecords(ResultSet). Fixes CSV-140. Thanks to Damjan Jovanovic. ggregory
Fix CSVFormat#withHeader doesn't work well with #printComment, add withHeaderComments(String...). Fixes CSV-130. Thanks to Sergei Lebedev. ggregory
Fix CSVFormat.EXCEL should ignore empty header names. Fixes CSV-128. ggregory
Fix Incorrect Javadoc referencing org.apache.commons.csv.CSVFormat withQuote(). Fixes CSV-132. Thanks to Sascha Szott. ggregory
Update Improve toString() implementation of CSVRecord. Fixes CSV-124. Thanks to Kalyan. brentworden
Update Unified parameter validation. Fixes CSV-134. Thanks to wu wen. ggregory
Add Add CSVFormat#with 0-arg methods matching boolean arg methods. Fixes CSV-129. ggregory
Add Save positions of records to enable random access. Fixes CSV-131. Thanks to Holger Stratmann. ggregory
Add CSVPrinter.printRecord(ResultSet) with metadata. Fixes CSV-139. ggregory

Release 1.0 – 2014-08-14

Type Changes By
Fix No longer works with Java 6. Fixes CSV-125. britter
Fix NullPointerException when empty header string and and null string of "". Fixes CSV-122. Thanks to Mike Lewis. britter
Update Validate format parameters in constructor. Fixes CSV-117. sebb
Add IllegalArgumentException thrown when the header contains duplicate names when the column names are empty. Fixes CSV-121. Thanks to Sebastian Hardt. ggregory
Add CSVFormat#withHeader doesn't work with CSVPrinter. Fixes CSV-120. Thanks to Sergei Lebedev. ggregory
Add CSVFormat is missing a print(...) method. Fixes CSV-119. Thanks to Sergei Lebedev. ggregory
Fix CSVRecord.toMap() throws NPE on formats with no headers. Fixes CSV-118. Thanks to Enrique Lara. ggregory
Fix Check whether ISE/IAE are being used appropriately. Fixes CSV-113. sebb
Fix CSVFormat constructor should reject a header array with duplicate entries. Fixes CSV-114. sebb
Fix HeaderMap is inconsistent when it is parsed from an input with duplicate columns names. Fixes CSV-112. britter
Fix CSVRecord.toMap() fails if row length shorter than header length. Fixes CSV-111. ggregory
Fix CSVFormat.format allways append null. Fixes CSV-106. ggregory
Add Add Map conversion API to CSVRecord. Fixes CSV-105. ggregory
Fix CSVParser: getHeaderMap throws NPE. Fixes CSV-100. ggregory
Update Lots of possible changes. Fixes CSV-42. Thanks to Bob Smith. ebourg
Update Use Character instead of char for char fields except delimiter. Fixes CSV-78. sebb
Update Revert Builder implementation in CSVFormat. Fixes CSV-99. britter
Fix CSVRecord does not verify that the length of the header mapping matches the number of values. Fixes CSV-53. britter
Update Allow the handling of NULL values. Fixes CSV-93. ggregory
Update Use the Builder pattern for CSVFormat. Fixes CSV-68. ggregory
Update Clarify comment handling. Fixes CSV-84. sebb
Update CSVParser.nextValue() seems pointless. Fixes CSV-25. ebourg
Update Allow the String value for null to be customized for the CSV printer. Fixes CSV-97. ggregory
Update Not possible to create a CSVFormat from scratch. Fixes CSV-88. ggregory
Add Keep track of record number. Fixes CSV-52. ggregory
Update Lexer should only use char fields. Fixes CSV-94. sebb
Add Need a way to extract parsed headers, e.g. for use in formatting output. Fixes CSV-92. ggregory
Add Header support. Fixes CSV-65. ebourg
Fix Confusing semantic of the ignore leading/trailing spaces parameters. Fixes CSV-54. sebb
Update Add convenience methods to CSVLexer. Fixes CSV-71. sebb
Update Is CharBuffer really needed, now that StringBuilder is available?. Fixes CSV-59. ebourg
Update Replace while(true)-loop in CSVParser.getRecord with do-while-loop. Fixes CSV-55. britter
Fix CSVFormat describes itself as immutable, but it is not - in particular it is not thread-safe. Fixes CSV-34. sebb
Fix Endless loops in CSV parser. Fixes CSV-36. yonik
Fix NullPointerException in CSVPrinter.print()/println(). Fixes CSV-13. ebourg
Update CSVPrinter overhaul. Fixes CSV-45. yonik
Fix Excel strategy uses wrong separator. Fixes CSV-23. ebourg
Update CSVStrategy has modifiable public static variables. Fixes CSV-49. Thanks to Bob Smith. ebourg
Add Predefined format for MYSQL. Fixes CSV-48. ebourg
Update Reduce visibility of methods in internal classes. Fixes CSV-46. ebourg
Update ExtendedBufferedReader does too much. Fixes CSV-26. jacopoc
Update Decide whether to keep the csv.writer subpackage. Fixes CSV-27. ebourg