Super CSV是一个用于处理CSV文件的Java开源项目。它完全围绕面向对象的思想进行设计,因此可以利用你的面向对象代码来使得处理CSV文件变得更加简易。它支持输入/输出类型转换、数据完整性校验,支持从任何地方以任何编码读写数据,只要提供相应的Reader与Writer对象。可配置分割符,空格符号和行结束符等。
下面来看一下官方文档中的代码示例。
1. 根据头来读取CSV文件
把文件中的每行记录读取出来转化为java对象,假设你有一个UserBean类,代码如下:
public class UserBean {
String username, password, street, town;
int zip;
public String getPassword() { return password; }
public String getStreet() { return street; }
public String getTown() { return town; }
public String getUsername() { return username; }
public int getZip() { return zip; }
public void setPassword(String password) { this.password = password; }
public void setStreet(String street) { this.street = street; }
public void setTown(String town) { this.town = town; }
public void setUsername(String username) { this.username = username; }
public void setZip(int zip) { this.zip = zip; }
}
并且有一个CSV文件,包含一个文件头,假设文件内容如下:
username, password, date, zip, town
Klaus, qwexyKiks, 17/1/2007, 1111, New York
Oufu, bobilop, 10/10/2007, 4555, New York
然后你可以使用一下代码来创建UserBean的实例对象,并打印出对象的属性值:
class ReadingObjects {
public static void main(String[] args) throws Exception{
ICsvBeanReader inFile = new CsvBeanReader(new FileReader("foo.csv"), CsvPreference.EXCEL_PREFERENCE);
try {
final String[] header = inFile.getCSVHeader(true);
UserBean user;
while( (user = inFile.read(UserBean.class, header, processors)) != null) {
System.out.println(user.getZip());
}
} finally {
inFile.close();
}
}
}
我们还剩下processors没有定义,通过名字我们可以看出是解析器,用来处理每列的数据,当然你也可以传入null,表示该列不做特殊处理,每个解析器可以被另外一个包含在内部,new Unique(new StrMinMax(5,20)),这个代码该列的值为唯一的,并且长度为8到20,具体处理细节我们先不讲,来看一下我们所需要的processors是如何定义的:
final CellProcessor[] processors = new CellProcessor[] {
new Unique(new StrMinMax(5, 20)),
new StrMinMax(8, 35),
new ParseDate("dd/MM/yyyy"),
new Optional(new ParseInt()),
null
};
上面的代码的具体意思为:
第一列是一个字符串,并且值是唯一的,长度为5到20
第二列是一个字符串,长度是8到35
第三列为一个日期类型,格式为天/月/年(day/month/year)
第四列是一个整型数字,但只有这列有值的时候ParseInt处理器才会去处理这个值(其实就是该列可以为空)
第五列为一个字符串(默认),不使用处理器
如果你的CSV文件没有头,你也可以定义个数组来替代:
final String[] header = new String[] { "username", "password", "date", "zip", "town"};
如果你想忽略某一列,和定义处理器类似,直接在头数组中使用null。
全部代码如下:
import Java.io.FileReader;
import Java.io.IOException;
import org.supercsv.cellprocessor.Optional;
import org.supercsv.cellprocessor.ParseDate;
import org.supercsv.cellprocessor.ParseInt;
import org.supercsv.cellprocessor.constraint.StrMinMax;
import org.supercsv.cellprocessor.constraint.Unique;
import org.supercsv.cellprocessor.ift.CellProcessor;
import org.supercsv.io.CsvBeanReader;
import org.supercsv.io.ICsvBeanReader;
import org.supercsv.prefs.CsvPreference;
class ReadingObjects {
static final CellProcessor[] userProcessors = new CellProcessor[] {
new Unique(new StrMinMax(5, 20)),
new StrMinMax(8, 35),
new ParseDate("dd/MM/yyyy"),
new Optional(new ParseInt()),
null
};
public static void main(String[] args) throws Exception {
ICsvBeanReader inFile = new CsvBeanReader(new FileReader("foo.csv"), CsvPreference.EXCEL_PREFERENCE);
try {
final String[] header = inFile.getCSVHeader(true);
UserBean user;
while( (user = inFile.read(UserBean.class, header, userProcessors)) != null) {
System.out.println(user.getZip());
}
} finally {
inFile.close();
}
}
}
public class UserBean {
String username, password, town;
Date date;
int zip;
public Date getDate() {
return date;
}
public String getPassword() {
return password;
}
public String getTown() {
return town;
}
public String getUsername() {
return username;
}
public int getZip() {
return zip;
}
public void setDate(final Date date) {
this.date = date;
}
public void setPassword(final String password) {
this.password = password;
}
public void setTown(final String town) {
this.town = town;
}
public void setUsername(final String username) {
this.username = username;
}
public void setZip(final int zip) {
this.zip = zip;
}
}
如果你在读取文件之前根本不知道文件的具体格式,你可以选择CsvListReader.read()方法,把每行读出出来的数据放在一个List里面。
读取文件的代码我们看到了,下面来看一下写的操作,也很简单。
import Java.util.HashMap;
import org.supercsv.io.*;
import org.supercsv.prefs.CsvPreference;
class WritingMaps {
main(String[] args) throws Exception {
ICsvMapWriter writer = new CsvMapWriter(new FileWriter(...), CsvPreference.EXCEL_PREFERENCE);
try {
final String[] header = new String[] { "name", "city", "zip" };
// set up some data to write
final HashMap<String, ? super Object> data1 = new HashMap<String, Object>();
data1.put(header[0], "Karl");
data1.put(header[1], "Tent city");
data1.put(header[2], 5565);
final HashMap<String, ? super Object> data2 = new HashMap<String, Object>();
data2.put(header[0], "Banjo");
data2.put(header[1], "River side");
data2.put(header[2], 5551);
// the actual writing
writer.writeHeader(header);
writer.write(data1, header);
writer.write(data2, header);
} finally {
writer.close();
}
}
}
分享到:
相关推荐
SuperCSV是一个强大的开源库,专门用于处理CSV文件,它提供了丰富的功能和灵活的API,使得在Java中读写CSV文件变得更加简单。这篇博客"Java读写CSV之SuperCSV"可能详细讲解了如何利用SuperCSV库进行CSV操作。 首先...
在Java开发中,处理CSV文件是常见的任务,而`super-csv`正是为此设计的一个高效且易于使用的库。 **super-csv库**是由James Bogle创建的,它提供了一套丰富的API,支持Java程序员方便地进行CSV文件的读取和写入操作...
**SuperCSV-1.52** 是一个专为Java开发者设计的开源库,用于处理CSV(Comma Separated Values)文件。CSV文件是一种常见的数据交换格式,尤其在数据分析、电子表格和数据库导入导出中广泛应用。SuperCSV提供了一个...
SuperCSV是一款强大的开源Java库,专为处理CSV数据而设计。本次我们关注的是其2.3.1版本,该版本的发布旨在提供更加稳定和高效的CSV操作体验。 SuperCSV 2.3.1主要知识点: 1. **基本功能**:SuperCSV提供了丰富的...
是一个快速、程序员友好的开源库,用于使用 Java 读写 CSV 文件。 它被许多大型项目使用,并且每月从 Maven 存储库下载 19000 多次。 文件: 下载说明: GitHub : 免费软件:Apache 许可证,版本 2.0 要求:Java ...
也可以使用开源库,如OpenCSV或Super CSV,它们提供了更高级的功能,如自动类型转换和错误处理。通过逐行读取文件,然后按逗号分割每一行得到字段,我们可以轻松地将数据映射到Java对象。 然后,提到的"jaxb"技术,...
Apache POI是Apache软件基金会的一个开源项目,提供了处理Microsoft Office格式文件(如Excel)的API。它支持读取、写入和修改Excel文件。首先,我们需要添加Apache POI的依赖到我们的项目中,通常通过Maven或Gradle...
Excel文件处理) poi-ooxml-3.7-20101029.jar poi-ooxml-schemas-3.7-20101029.jar super-csv-2.4.0.jar (csv文件类型) xmlbeans-2.3.0.jar 实体类中 在实体类中字段上方@ExportColumn注解指定需要通过数据文件...
“Excel_Csv_Tool-master”这个项目很可能是一个Java实现的开源工具,用于处理Excel和CSV文件的转换及操作。项目可能包含了以下功能: 1. Excel到CSV的转换:读取Excel文件,将其内容转换为CSV格式,并保存到新的...
5. 第三方库:如OpenCSV、SuperCSV等 这些库主要针对CSV格式,但可以作为读取Excel的一种间接方式,特别是当Excel文件仅包含一列或多列数据时。 总结,Java开发者可以通过Apache POI库实现对Excel 2003 (.xls) 和 ...
13. **Super CSV**:用于CSV文件的读写,提供了强大的功能和灵活性。 14. **com4j**:允许Java调用COM组件,用于与Windows平台的交互。 15. **util.concurrent**:Java并发开发包,包含高级并发工具,如并发集合、...
标题 "Super-Strings Tool-开源" 指的是一款名为 "Super-Strings Tool" 的开源软件工具,专门用于处理字符串相关的任务。开源意味着该软件的源代码是公开的,允许用户自由查看、修改和分发,社区中的开发者可以贡献...
JaCoCo(Java Code Coverage)是一个广泛使用的开源代码覆盖率工具,专门针对Java应用程序。它提供了简单的API和Maven、Gradle等构建工具的插件,使得开发者能够轻松地集成到自己的项目中,以测量单元测试的代码覆盖...
SuperCoder是一款专门用于手动编码数字视频文件中视线数据的开源工具,它的出现为研究者和开发者提供了一个灵活且可定制的平台,以实现对视线数据的高效处理。 PLP视线编码主要由两个核心部分组成:瞳孔定位(Pupil...
标题中的“完整版超级列表框选中项存为Excel文件”指的是一个软件功能或编程实践,它涉及到在用户界面中使用超级列表框(Super ListBox)控件,这种控件通常用于展示大量数据,并允许用户进行多选操作。当用户选择了...
本文将详细介绍一款名为"PMSL - Project Management Super Light"的开源项目管理工具,它以其轻量级的特性,为用户提供了一种简单易用、功能丰富的解决方案。 PMSL是一款基于Web的应用,其核心设计理念是简洁与实用...
总结,Java提供了丰富的工具和库来处理表格,无论是创建用户界面还是处理Excel和CSV文件。开发者可以根据项目需求选择合适的框架和库,利用Java的强大功能实现功能丰富的表格应用。理解并掌握这些知识点,将有助于...
7. **SuperSocket.SocketBase.dll**和**SuperSocket.SocketEngine.dll**:这两个文件属于SuperSocket库,用于网络通信,可能支持B3助手与远程服务器或设备的实时交互。 8. **CsvHelper.dll**:这是一个CSV数据处理...
【标题】:“nutty-cuckoo-super-kings”是一个以“Nutty Cuckoo Super Kings”为主题的项目,这可能是一个虚构的社交板球团队的数据分析平台。该项目旨在收集、处理并展示该板球队的详细统计数据,从而为球迷、分析...
文件"temps.csv"很可能包含了历史气温记录,每一行代表一个时间点的数据,列可能包括日期、地点、最高气温、最低气温、平均气温等信息。在开始分析之前,我们需要导入Python的数据处理库,如Pandas,来读取和预处理...