Skip to content

Releases: osiegmar/FastCSV

v4.3.1

Choose a tag to compare

@github-actions github-actions released this 29 Jun 17:46
ecfc610

4.3.1 (2026-06-29)

Bug Fixes

  • detect BOM correctly on short streams in BomInputStream (efc1633)
  • prevent ArrayIndexOutOfBoundsException in NamedCsvRecord.findFields (0a05a0b)
  • prevent data corruption after seek in IndexedCsvReader with multibyte charsets (c7d45ff)
  • prevent skipLine from resurrecting an unterminated last line at EOF (be02dab)
  • reject non-ASCII-compatible charsets in IndexedCsvReader (8cc6ea8)

v4.3.0

Choose a tag to compare

@github-actions github-actions released this 19 May 21:21
8c61fc1

4.3.0 (2026-05-09)

Features

  • add allowUnclosedQuote flag to reader builders (#173) (171101a)
  • lock skipLines once CSV parsing has started (fb018d2)

Bug Fixes

  • clear stale CR flag on closing quote in StrictCsvParser (a6d3de5)
  • peekLine in RelaxedCsvParser truncated long lines (ce86205)
  • peekLine left buffer in inconsistent state after compaction (0819c4f)
  • reset() in StrictCsvParser left parser-state fields stale (9c0d607)

v4.2.0

Choose a tag to compare

@github-actions github-actions released this 04 Apr 08:22
7a572f9

4.2.0 (2026-04-04)

Features

  • add FieldMismatchStrategy to replace allowExtraFields/allowMissingFields (b1049ac), closes #176

v4.1.1

Choose a tag to compare

@github-actions github-actions released this 08 Mar 07:29
187325a

4.1.1 (2026-03-08)

Bug Fixes

  • correct BomInputStream buffer offset for short inputs (#174) (1275474)

Performance Improvements

  • precompute comment strategy check in parser (6d6e874)
  • use range check in fast-forward loops (85eb73f)

Release v4.1.0

Choose a tag to compare

@github-actions github-actions released this 09 Oct 17:13

Release v4.1.0

🚀 Features

  • 960d8c8 ignore same comment character if comments are ignored

🧰 Tasks

🛠 Build

  • 8a6759f disable configuration cache for jReleaser
  • 4b582d0 deps: update jReleaser dependency
  • b55eb75 updated gradle tasks
  • ee41d8a OSS-Fuzz requires JDK 17
  • 05c99fb add foojay-resolver to buildSrc
  • 9e029e6 website: update dependencies
  • ad76e78 update to JUnit 6
  • eb5af63 use Java 25 to build
  • 0c142d9 codeql does currently not support arm-based runners
  • 1d141c0 website: update dependencies
  • e844d06 update setup-java action
  • 5b79b63 try arm-based runner
  • 313e584 try arm-based runner
  • 3dc1d4d update checkout action
  • c4b0aa8 website: update dependencies
  • b35ffc3 updated Gradle, enabled configuration cache

📝 Documentation

  • 48f7c1e use Java 25 syntax for examples
  • 40b7cd6 website: add example for interpreting empty fields as null values
  • 0392eb8 website: add JUnit and order prominent users alphabetically
  • 50b78b4 website: update benchmarks
  • 619aec5 website: update website dependencies
  • 60baf89 website: refer to 4.0.0

Release v4.0.0

Choose a tag to compare

@github-actions github-actions released this 22 Jun 14:18

See the upgrade guide on how to switch from version 3.x smoothly.

🚀 Features

  • 18688cc add returnHeader to NamedCsvRecordHandler to allow early-access to the header #147, closes #147
  • e006347 add ofSingleCsvRecord methods to CsvReader for convenience
  • 60774d3 🚨 enforce unique headers by default
  • bd9991f introduce relaxed parsing mode for CsvReader

🐛 Fixes

  • 76dff29 don't call peek line predicate with empty string if reached EOF

🔄️ Changes

  • a565316 add missing finals
  • 57da808 optimize performance of relaxed parser
  • 77b986c change skipLine method to void and handle EOF exceptions
  • c815d3e simplify BOM handling in CsvReader #149, closes #149
  • 52fe46d add class retention to allow incremental builds
  • cef4a2b later buffer expansion
  • 47cca27 refactor EOF handling when peeking lines
  • bba1412 introduce Nullable annotation
  • 98aeaab 🚨 return Optional for throwable in status listener
  • 1130197 use errorprone
  • ef14cb7 change exception type from IllegalArgumentException to IllegalStateException for relaxed mode validation
  • b1b5f23 simplify quoted parsing logic in RelaxedCsvParser
  • 08194a4 remove dead code
  • ced8dd3 introduce LookaheadReader to improve the performance of RelaxedCsvParser
  • 1bc5f26 🚨 convert FieldModifiers class to enum and move modify method to FieldModifier interface
  • d1e5943 remove unnecessary 'this' keyword in variable assignments
  • cb5a999 🚨 rename quoteNonEmpty method to quoteValue and made quoteStrategy non-nullable
  • 5fbfe91 update method name for allowing duplicate header fields in NamedCsvRecordHandler
  • 5980793 simplify materializeField logic and adjust return flow
  • 056c865 🚨 CSV callback handling and record type logic
  • 85bbfdf 🚨 Refactor field count handling in CsvReader
  • 4107892 simplify validation error messages and add a new test
  • dd00979 extract csv parser interface to allow multiple implementations
  • 3ac07d1 🚨 strict handling of characters after closing quote, by default
  • 9d8511b seal AbstractInternalCsvCallbackHandler for internal use (as documented before)
  • a33384e use unnamed variables (_) in lambdas to simplify tests
  • 2babea6 🚨 disable automatic buffer flushing for writer use
  • 403c2f6 use skipNBytes for skipping a detected BOM
  • 0d05add 🚨 removed deprecated code (Limits and SimpleFieldModifier)
  • 9e620a3 corrected method name in error message
  • 006380c 🚨 remove the RecordWrapper
  • 430adef add Serial annotation
  • 724bc38 🚨 changed implementation of CsvIndex and CsvPage to Java records
  • 3e11bfc use formatted Strings
  • 01f5cb3 use switch expression

🧪 Tests

🧰 Tasks

  • 3e3edcb update dependencies for test and build; refactor internal code to keep SpotBugs happy
  • 0a0136c prepare (clean) upgrading.md for a new major release
  • ba1a894 bump version to 4.0.0-SNAPSHOT

🛠 Build

  • f990d39 update resolver plugin
  • 03f4a49 bump version to 4.0.0
  • f14dab0 updated Gradle
  • 0d97d92 updated build/test dependencies
  • 2cd4ac1 add SPDX-License-Identifier to MANIFEST.MF
  • a3aafac update pitest version for Java 24 compatibility
  • 541b39e include LICENSE file in META-INF directory for use in dependent libraries
  • d14aef6 enable parameter names for tests with @ParameterizedTest
  • 7584ab9 update PMD and remove unnecessary suppressions
  • d8fadf0 🚨 require Java 17 / Android 34
  • 280ab79 let JReleaser manage the CHANGELOG.md

📝 Documentation

  • c248a38 document array wrapping usage
  • f10e7ea update copyright year in LICENSE file
  • e5fff5a align with Java 17

v3.7.0

Choose a tag to compare

@osiegmar osiegmar released this 11 May 12:02

Added

  • FieldModifiers.modify(Function<String, String>) to simply modify fields via functional interface

Deprecated

  • SimpleFieldModifier interface
  • FieldModifiers.lower and FieldModifiers.upper methods

v3.6.0

Choose a tag to compare

@osiegmar osiegmar released this 04 Mar 20:28

Added

  • Configuration of maximum fields, maximum field size, and maximum record size via record handler
  • Fluent configuration for CsvRecordHandler, NamedCsvRecordHandler, and StringArrayHandler
  • maxBufferSize(int) in CsvReaderBuilder and IndexedCsvReaderBuilder to alter the maximum buffer size of the parser

Changed

  • Use ReentrantLock in IndexedCsvReader instead of synchronized to prevent pinning of virtual threads
  • More precise error messages when exceeding the maximum field or record size
  • More precise error when parsing error occurs within IndexedCsvReader
  • Apply length constraints (maximum field size and maximum record size) after applying field modifiers

Deprecated

  • Setting the maximum field size (and maximum buffer size) via system property fastcsv.max.field.size
  • Setting the maximum field count per record via system property fastcsv.max.field.count
  • Constructor initialization of CsvRecordHandler, NamedCsvRecordHandler, and StringArrayHandler

v3.5.0

Choose a tag to compare

@osiegmar osiegmar released this 22 Feb 11:12

Added

  • Support InputStream as an input source for CsvReader including BOM detection #130
  • Support OutputStream as an output target for CsvWriter

v3.4.0

Choose a tag to compare

@osiegmar osiegmar released this 04 Nov 17:10

Added

  • Add skipLines(int) and skipLines(Predicate<String>, int) to CsvReader to skip lines before the actual CSV data starts