mneri/csv
is a fast and easy-to-use library to read and write CSV files.
The code of most of the parsers you can find online is bloated and complicated. I wanted make a parser that was brief,
clean and easy to understand. The algorithm of CsvReader
is
30 lines of code.
It is fast. My preliminary tests show that the speed of CsvReader
is comparable to the speed of
uniVocity, one of the fastest csv parsers. I submitted a
pull request to their benchmark, yet to be approved.
Memory consumption is also low. You can run mneri/csv
on uniVocity benchmark with a 1MB JVM (-Xmx1m
).
To read a CSV file you use CsvReader
class.
CsvReaderFactory factory = new DefaultCsvReaderFactory();
try (CsvReader<Person> reader = factory.open(new File("people.csv"), new PersonDeserializer())) {
while (reader.hasNext()) {
doSomething(reader.next());
}
}
Where PersonDeserializer
is:
public class PersonDeserializer implements CsvDeserializer<Person> {
@Override
public Person deserialize(RecyclableCsvLine line) {
Person person = new Person();
person.setFirstName(line.getString(0));
person.setLastName(line.getString(1));
return person;
}
}
Writing to a csv file is easy, too.
CsvWriterFactory factory = new DefaultCsvWriterFactory();
try (CsvWriter<Person> writer = factory.open(new File("people.csv"), new PersonSerializer())) {
for (Person person : persons) {
writer.put(person);
}
}
Where PersonSerializer
is:
public class PersonSerializer implements CsvSerializer<Person> {
@Override
public void serialize(Person person, List<String> out) {
out.add(person.getFirstName());
out.add(person.getLastName());
}
}