supercsv

SuperCSV motivation is to be the foremost, fastest, and most programmer-friendly, free CSV package for Java. Unfortunately we don’t have in-built CSV parser in java.

SuperCSV的动力将是针对Java的最重要,最快速,最方便程序员的免费CSV软件包。 不幸的是,我们在Java中没有内置的CSV解析器。

超级CSV (SuperCSV)

There are many open source CSV parsers in java. But SuperCSV parser is my favourite. The power of Super CSV parser is the CellProcessor that gives a lot of features. You can specify a column value to be NotNull, Optional, Unique. SuperCSV cell processors also support Date Time conversion, Joda Time, Enum etc.

Java中有许多开源CSV解析器。 但是SuperCSV解析器是我的最爱。 Super CSV解析器的CellProcessor功能是CellProcessor ,它具有许多功能。 您可以将列值指定为NotNull,可选,唯一。 SuperCSV单元处理器还支持日期时间转换,乔达时间,枚举等。

Today we will look into SuperCSV example to read CSV file and convert it to list of java object. We will also have a quick look of Super CSV example program to write CSV data.

今天,我们将研究SuperCSV示例,以读取CSV文件并将其转换为Java对象列表。 我们还将快速浏览一下超级CSV示例程序,以编写CSV数据。

Before we look into example, we have to create sample CSV data and corresponding java bean.

在研究示例之前,我们必须创建示例CSV数据和相应的java bean。

1,Pankaj Kumar,20,India
2,David Dan,40,USA
3,Lisa Ray,28,Germany

Our corresponding java bean class is Employee.java as defined below.

我们相应的Java bean类是Employee.java ,如下所示。

package com.journaldev.csv.model;public class Employee {private String id;private String name;private String age;private String country;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getCountry() {return country;}public void setCountry(String country) {this.country = country;}@Overridepublic String toString() {return "{" + id + "::" + name + "::" + age + "::" + country + "}";}
}

SuperCSV Maven (SuperCSV Maven)

Add below dependency in your maven project pom.xml file to get the Super CSV jar.

在您的maven项目pom.xml文件中添加以下依赖项,以获取Super CSV jar。

<dependency><groupId>net.sf.supercsv</groupId><artifactId>super-csv</artifactId><version>2.4.0</version>
</dependency>

SuperCSV CsvBeanReader (SuperCSV CsvBeanReader)

Here is a simple Super CSV example program using CsvBeanReader to parse CSV data list of java object.

这是一个使用CsvBeanReader解析Java对象的CSV数据列表的简单Super CSV示例程序。

package com.journaldev.csv.supercsv.parser;import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;import org.supercsv.cellprocessor.Optional;
import org.supercsv.cellprocessor.constraint.NotNull;
import org.supercsv.cellprocessor.constraint.UniqueHashCode;
import org.supercsv.cellprocessor.ift.CellProcessor;
import org.supercsv.io.CsvBeanReader;
import org.supercsv.io.ICsvBeanReader;
import org.supercsv.prefs.CsvPreference;import com.journaldev.csv.model.Employee;public class SuperCSVParserExample {public static void main(String[] args) throws IOException {List<Employee> emps = new ArrayList<Employee>();ICsvBeanReader beanReader = new CsvBeanReader(new FileReader("emps.csv"), CsvPreference.STANDARD_PREFERENCE);// the name mapping provide the basis for bean settersfinal String[] nameMapping = new String[] { "id", "name", "age", "country" };//to read and skip header row//final String[] header = beanReader.getHeader(true);final CellProcessor[] processors = getProcessors();Employee emp;while ((emp = beanReader.read(Employee.class, nameMapping, processors)) != null) {emps.add(emp);}System.out.println(emps);beanReader.close();}private static CellProcessor[] getProcessors() {final CellProcessor[] processors = new CellProcessor[] { new UniqueHashCode(), // IDnew NotNull(), // Namenew Optional(), // Agenew NotNull() // Country};return processors;}}

The program is simple to understand, most important part is the creation of Super CSV cell processors.

该程序简单易懂,最重要的部分是创建超级CSV单元处理器。

If your CSV file contains header row, then use beanReader.getHeader(true) to read and skip the header for processing.

如果您的CSV文件包含标题行,请使用beanReader.getHeader(true)读取并跳过标题以进行处理。

SuperCSV CsvBeanWriter (SuperCSV CsvBeanWriter)

A simple Super CSV example using CsvBeanWriter to write CSV data. I am assuming that age and country fields are optional.

使用CsvBeanWriter编写CSV数据的简单Super CSV示例。 我假设年龄和国家/地区字段是可选的。

package com.journaldev.csv.supercsv.parser;import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;import org.supercsv.cellprocessor.Optional;
import org.supercsv.cellprocessor.constraint.NotNull;
import org.supercsv.cellprocessor.constraint.UniqueHashCode;
import org.supercsv.cellprocessor.ift.CellProcessor;
import org.supercsv.io.CsvBeanWriter;
import org.supercsv.io.ICsvBeanWriter;
import org.supercsv.prefs.CsvPreference;import com.journaldev.csv.model.Employee;public class SuperCSVWriterExample {public static void main(String[] args) throws IOException {List<Employee> emps = generateDemoData();StringWriter writer = new StringWriter();ICsvBeanWriter beanWriter = new CsvBeanWriter(writer, CsvPreference.STANDARD_PREFERENCE);final String[] header = new String[] { "id", "name", "age", "country" };final CellProcessor[] processors = getProcessors();// write the headerbeanWriter.writeHeader(header);// write the beans datafor (Employee emp : emps) {beanWriter.write(emp, header, processors);}beanWriter.close();System.out.println("CSV Data\n" + writer.toString());}private static CellProcessor[] getProcessors() {final CellProcessor[] processors = new CellProcessor[] { new UniqueHashCode(), // IDnew NotNull(), // Namenew Optional(), // Agenew Optional() // Country};return processors;}private static List<Employee> generateDemoData() {List<Employee> emps = new ArrayList<>();Employee emp = new Employee();emp.setId("1");emp.setName("Pankaj Kumar");emp.setAge("30"); // country is optional and not setEmployee emp1 = new Employee();emp1.setId("2");emp1.setName("David");emp1.setCountry("USA"); // age is optionalEmployee emp2 = new Employee();emp2.setId("3");emp2.setName("Lisa");emp2.setAge("20");emp2.setCountry("India");emps.add(emp);emps.add(emp1);emps.add(emp2);return emps;}}

Above program produce below CSV output.

上面的程序产生下面的CSV输出。

CSV Data
id,name,age,country
1,Pankaj Kumar,30,
2,David,,USA
3,Lisa,20,India

If you don’t want header row, then comment the code beanWriter.writeHeader(header) in above program.

如果您不希望标题行,请在上面的程序中注释代码beanWriter.writeHeader(header)

If the above program is changed to keep the id of two Employee objects same, then we will get below exception.

如果更改上述程序以使两个Employee对象的ID保持不变,那么我们将获得以下异常。

Exception in thread "main" org.supercsv.exception.SuperCsvConstraintViolationException: duplicate value '2' encountered with hashcode 50
processor=org.supercsv.cellprocessor.constraint.UniqueHashCode
context={lineNo=4, rowNo=4, columnNo=1, rowSource=[2, Lisa, 20, India]}at org.supercsv.cellprocessor.constraint.UniqueHashCode.execute(UniqueHashCode.java:78)at org.supercsv.util.Util.executeCellProcessors(Util.java:93)at org.supercsv.io.CsvBeanWriter.write(CsvBeanWriter.java:136)at com.journaldev.csv.supercsv.parser.SuperCSVWriterExample.main(SuperCSVWriterExample.java:33)

The reason is that we have defined id column to have UniqueHashCode constraint. This is a very unique and important feature, missing in all the other CSV parsers in java.

原因是我们已将id列定义为具有UniqueHashCode约束。 这是一个非常独特且重要的功能,在Java中的所有其他CSV解析器中都没有。

That’s all for a quick SuperCSV tutorial.

这就是快速SuperCSV教程的全部内容。

Reference: SuperCSV Home Page

参考: SuperCSV主页

翻译自: https://www.journaldev.com/12021/supercsv-csvbeanreader-cellprocessor-csvbeanwriter

supercsv

supercsv_SuperCSV – CsvBeanReader,CellProcessor,CsvBeanWriter相关推荐

  1. Mysql,SqlServer,Oracle主键自动增长的设置

    Mysql,SqlServer,Oracle主键自动增长的设置 参考文献 http://blog.csdn.net/andyelvis/article/details/2446865 1.把主键定义为 ...

  2. linux启动,重启,停止 jar,.sh脚本

    linux启动,重启,停止 jar,.sh脚本 #配置jar名称 APP_NAME=receiver.jar#使用说明,用来提示输入参数 usage() { echo "Usage: sh ...

  3. 堆栈,数据,文本,heap,bss,text data,stack

    堆栈,数据,文本,heap,bss,text data,stack text data bss stack heap 段 根据APUE,程序分为下面的段:.text, data (initialize ...

  4. TVM示例展示 README.md,Makefile,CMakeLists.txt

    TVM示例展示 README.md,Makefile,CMakeLists.txt TVM/README.md Open Deep Learning Compiler Stack Documentat ...

  5. TVM,Relay,Pass

    TVM,Relay,Pass Relay介绍 主要结合TVM的文档(https://tvm.apache.org/docs/dev/relay_intro.html),介绍一下NNVM的第二代Rela ...

  6. LED芯片,应用品,蓝宝石衬底,集成电路,UV

    LED芯片,应用品,蓝宝石衬底,集成电路,UV 三安主要从事全色系超高亮度LED芯片的研发,生产与销售,产品性能稳定,品质优异. 产品覆盖 三安能够提供全波长范围的LED,产品可覆盖全部可见光和不可见 ...

  7. CPU,GPU,Memory调度

    CPU,GPU,Memory调度 HDD&Memory&CPU调度机制(I/O硬件性能瓶颈) 图1. HDD&Memory&CPU调度图 CPU主要就是三部分:计算单元 ...

  8. 自动驾驶QNX,Linux,Autosar概述

    自动驾驶QNX,Linux,Autosar概述 QNX是一个分布式.嵌入式.可规模扩展的实时操作系统.遵循POSIX.1 (程序接口)和POSIX.2 (Shell和工具).部分遵循POSIX.1b( ...

  9. i.MX6UL: i.MX 6UltraLite处理器 - 低功耗,安全,Arm® Cortex®-A7内核

    i.MX6UL: i.MX 6UltraLite处理器 - 低功耗,安全,Arm® Cortex®-A7内核 概述 i. MX6UltraLite作为i.MX6系列的扩展,一系列高性能.超高效的处理器 ...

最新文章

  1. 周杰伦林俊杰李宗盛快失业了!有了AI,未来人人都能秒变作曲家
  2. 从深度图到点云的构建方式
  3. linux uvc 支持的设备,摄像头是否支持uvc
  4. 华为手机刷linux系统,华为Harmony OS 2.0手机Beta版刷机包流出:电脑助手一键刷入/手动...
  5. 深入研究 Java Synchronize 和 Lock 的区别与用法
  6. python下载包管理器_Python包管理整理:setuptool管理python相关的包
  7. 在 Asp.Net Core WebAPI 中防御跨站请求伪造攻击
  8. Exception from HRESULT: 0x800A03EC
  9. C程序范例(2)——学生管理系统”链表“实现
  10. logfile switch causes incremental checkpoint?
  11. NHibernate学习系列之一
  12. 路径规划之空间采样算法研究现状简述
  13. java创建对象方法列表(转)
  14. 保存好用的工具---转载
  15. java 面试高频问题 java8新特性
  16. GHOST XP SP3 遐想网络 纯净驱动预览版 2.0
  17. ocx注册成功但是页面不显示
  18. IAST 被动扫描 WebGoat
  19. A 股历年三大财务报表 API 接口
  20. 基于C语言的个人所得税计税系统

热门文章

  1. PHP读写指定URL参数的方法
  2. 强大的Qtstylesheet
  3. Opera 设置微软雅黑字体显示!
  4. [转载] (三)Python关键字和内置函数
  5. 记录一次有意思的XSS过滤绕过
  6. GCC the GNU
  7. C#实现鼠标进入按键范围后按键自动窗体内位置移动
  8. js function定义函数的4种方法
  9. WCF 点滴启示录系列(一)
  10. NSS_08 extjs表单验证