FastCSV is a lightning-fast, dependency-free CSV library for Java that conforms to RFC standards.
The primary use cases of FastCSV include:
- In big data applications: efficiently reading and writing data on a massive scale.
- In small data applications: serving as a lightweight library without additional dependencies.
Note
This selected benchmark is based on the Java CSV library benchmark suite
While maintaining high performance, FastCSV serves as a strict RFC 4180 CSV writer while also exhibiting the ability to read somewhat garbled CSV data. See JavaCsvComparison for details.
As one of the most popular CSV libraries for Java on GitHub, FastCSV comes with a wide range of features:
- Crafted with natural intelligence, β€οΈ, and AI assistance β¨
- Enables ultra-fast reading and writing of CSV data
- Has zero runtime dependencies
- Maintains a small footprint
- Provides a null-free and developer-friendly API
- Compatible with GraalVM Native Image
- Delivered as an OSGi-compliant bundle
- Actively developed and maintained
- Well-tested and documented
- Compliant to RFC 4180 β including:
- Newline and field separator characters in fields
- Quote escaping
- Configurable field separator
- Supports line endings
CRLF
(Windows),LF
(Unix) andCR
(old macOS) - Supports unicode characters
- Supports reading of some non-compliant (real-world) data
- Preserves line break character(s) within fields
- Preserves the starting line number (even with skipped and multi-line records) β helpful for error messages
- Auto-detection of line delimiters (
CRLF
,LF
, orCR
β can also be mixed) - Configurable data validation
- Supports (optional) header records (get field based on field name)
- Supports skipping empty lines
- Supports commented lines (skipping & reading) with configurable comment character
- Configurable field modifiers (e.g., to trim fields)
- Flexible callback handlers (e.g., to directly map to domain objects)
- BOM support (UTF-8, UTF-16 LE/BE, UTF-32 LE/BE)
- Supports flexible quoting strategies (e.g., to differentiate between empty and null)
- Supports writing comments
- for 3.x version: Java β©Ύ 11 (Android 13 / API level 33)
- for 2.x version: Java β©Ύ 8 (Android 8 / API level 26)
Note
Android is not Java and is not officially supported. Nevertheless, some basic checks are included in the continuous integration pipeline to verify that the library should work with Android.
CsvReader.builder().ofCsvRecord("foo1,bar1\nfoo2,bar2")
.forEach(System.out::println);
try (CsvReader<CsvRecord> csv = CsvReader.builder().ofCsvRecord(file)) {
csv.forEach(System.out::println);
}
CsvReader.builder().ofNamedCsvRecord("header 1,header 2\nfield 1,field 2")
.forEach(rec -> System.out.println(rec.getField("header2")));
CsvCallbackHandler<NamedCsvRecord> callbackHandler =
new NamedCsvRecordHandler("header1", "header2");
CsvReader.builder().build(callbackHandler, "field 1,field 2")
.forEach(rec -> System.out.println(rec.getField("header2")));
CsvReader.builder()
.fieldSeparator(';')
.quoteCharacter('"')
.commentStrategy(CommentStrategy.SKIP)
.commentCharacter('#')
.skipEmptyLines(true)
.ignoreDifferentFieldCount(false)
.acceptCharsAfterQuotes(false)
.detectBomHeader(false);
try (IndexedCsvReader<CsvRecord> csv = IndexedCsvReader.builder().ofCsvRecord(file)) {
CsvIndex index = csv.getIndex();
System.out.println("Items of last page:");
int lastPage = index.getPageCount() - 1;
List<CsvRecord> csvRecords = csv.readPage(lastPage);
csvRecords.forEach(System.out::println);
}
var sw = new StringWriter();
CsvWriter.builder().build(sw)
.writeRecord("header1", "header2")
.writeRecord("value1", "value2");
System.out.println(sw);
try (CsvWriter csv = CsvWriter.builder().build(file)) {
csv
.writeRecord("header1", "header2")
.writeRecord("value1", "value2");
}
CsvWriter.builder()
.fieldSeparator(',')
.quoteCharacter('"')
.quoteStrategy(QuoteStrategies.ALWAYS)
.commentCharacter('#')
.lineDelimiter(LineDelimiter.LF);
- Examples
- JavaDoc
- How to Upgrade
- Changelog
- Design & Architecture
- CSV Interpretation
- Design Goals
- How to Contribute
YourKit was used to optimize the performance and footprint of FastCSV. YourKit is the creator of YourKit Java Profiler, YourKit .NET Profiler, and YourKit YouMonitor.