Jul
31
2007

opencsv 1.8 ships – now with Bean binding

For reasons I’ll never understand, my little Apache2 open source CSV parser, opencsv has recently trucked through the 20,000 download mark.

Thanks to some wonderful work from Kyle Miller, I’ve just shipped version 1.8 which includes Kyle’s neat little Bean binding framework. Using one of Kyle’s various binding strategies (column position, column name, custom strategy), you can now bind a CSV file to a list of beans:

      ColumnPositionMappingStrategy strat = new ColumnPositionMappingStrategy();
      strat.setType(YourOrderBean.class);
      String[] columns = new String[] {"name", "orderNumber", "id"};
      strat.setColumnMapping(columns);

      CsvToBean csv = new CsvToBean();
      List list = csv.parse(strat, yourReader);

Great stuff, Kyle!

You can grab the new version from the download page, or checkout the javadoc, or see some sample usage scenarios.

Enjoy!

About the Author: Glen Smith

16 Comments + Add Comment

  • interesting project, I’m new to the csv, sorry if I asked stupid question, Can I use csv as a lightweight db? I guess it support parser, but is it support update the line, delete the line?

  • How to bind some column in the csv file, how to specify the column position?

    Thanks in advance!

  • Check out the ColumnPositionMappingStrategy… just what you’re after.

  • Great addition. Any thoughts on a BeanToCSV writer?

  • Is there any particular reason in CSV to quote an integer value? I was writing some unit tests to compare the behaviour of this CSV library against the others, and I’ve noticed that the output is pretty fond of quoting. On the upside it’s the only library which correctly writes null values.

  • Glen, I now use the JaCli with OpenCSV to parse the CSV files to a Collection of Beans, see the post here http://code.google.com/p/jacli/wiki/JaCliWithOpenCSV

  • As Li asked earlier, any thoughts on BeanToCSV class. I have a requirement like write Bean to CSV directly rather than preparing String buffer from a Bean.

    Thanks in advance.

  • hi ur opencsv is great.
    bt i ran into a problem dat in some computer, some files a file not found exception
    i use the constructor CsvReader(new FileReader(file))
    im wondering if compatibility is an issue
    as these problems i encounter are from 2 MAC users. it work fine in my Windows though.

  • hi, great csv library, iv used the CsvToBean class to map colums to beans, only problem is i need to be able to customise the csv seperator but :

    ColumnPositionMappingStrategy strat = new ColumnPositionMappingStrategy();
    strat.setType(YourOrderBean.class);
    String[] columns = new String[] {“name”, “orderNumber”, “id”};
    strat.setColumnMapping(columns);
    CsvToBean csv = new CsvToBean();
    List list = csv.parse(strat, yourReader)

    this forces the use of the default ‘,’ seperator.
    if anybody knows of way to use a custum seperator i would be very greatfull

  • Glen, Does it support charset encoding? How do I read/write unicode csv file?

  • Is there a way to write beans using CsvWriter?

  • Hi Glen, I like opencsv, great tool. Can opencsv append? I may have missed something, but every time I use the writer, it scraps the complete document, so I have to do some coding gymnastics to keep the stuff that’s already there.

  • Hi Glen,
    I used opencsv and found that it is not handling the blank lines because the csv is having extra rows with just commas the separator for next value. Hence CsvToBean is creating a bean with blank strings, So does CSVReader does not check for only commas i.e. in nextLine.

  • @Himanshu Can you try with opencsv 2.0.1? I think there were some fixes about this at some stage. Feel free to raise an issue (with sample data) if it’s still not working the way you think.

  • OpenCSV parser is unable parse to JavaBean with Integer or Data data type.
    Kindly me know the way to type those datatypes

  • Hi Glen, I am using OpenCSV for my development purposes. I am also facing the same issue as to parse through Blank Lines. I’ve latest version but still reader object doesn’t check for Blank Lines. Basically first, I am reading all lines by readAll and iterating through that list to get my String Array but since it doesnt have API, I’ve to check runtime. It will be great if it is inbuilt functionality.

Leave a comment

Glen Smith

About Glen

Co-author Grails in Action