`

Super CSV用于处理CSV文件的Java开源项目

阅读更多
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();
    }
  }
}
分享到:
评论
3 楼 yaov 2016-10-31  
mark
2 楼 攻城小狮 2016-10-25  
感谢 这个对CellProcessor的介绍很容易理解。
1 楼 flyli815 2011-08-17  
这个也不太行啊!不能输出1301699234566666的数字啊! 用Excel打开后会显示为:1.3E+15

相关推荐

    Java读写CSV之SuperCSV

    SuperCSV是一个强大的开源库,专门用于处理CSV文件,它提供了丰富的功能和灵活的API,使得在Java中读写CSV文件变得更加简单。这篇博客"Java读写CSV之SuperCSV"可能详细讲解了如何利用SuperCSV库进行CSV操作。 首先...

    super-csv一个快速开源的CSV读写Java库

    在Java开发中,处理CSV文件是常见的任务,而`super-csv`正是为此设计的一个高效且易于使用的库。 **super-csv库**是由James Bogle创建的,它提供了一套丰富的API,支持Java程序员方便地进行CSV文件的读取和写入操作...

    SuperCSV-1.52

    **SuperCSV-1.52** 是一个专为Java开发者设计的开源库,用于处理CSV(Comma Separated Values)文件。CSV文件是一种常见的数据交换格式,尤其在数据分析、电子表格和数据库导入导出中广泛应用。SuperCSV提供了一个...

    supercsv2.3.1

    SuperCSV是一款强大的开源Java库,专为处理CSV数据而设计。本次我们关注的是其2.3.1版本,该版本的发布旨在提供更加稳定和高效的CSV操作体验。 SuperCSV 2.3.1主要知识点: 1. **基本功能**:SuperCSV提供了丰富的...

    java版地图源码-super-csv:一个快速的、程序员友好的、免费的JavaCSV库

    是一个快速、程序员友好的开源库,用于使用 Java 读写 CSV 文件。 它被许多大型项目使用,并且每月从 Maven 存储库下载 19000 多次。 文件: 下载说明: GitHub : 免费软件:Apache 许可证,版本 2.0 要求:Java ...

    Excel列表转化成java对象

    也可以使用开源库,如OpenCSV或Super CSV,它们提供了更高级的功能,如自动类型转换和错误处理。通过逐行读取文件,然后按逗号分割每一行得到字段,我们可以轻松地将数据映射到Java对象。 然后,提到的"jaxb"技术,...

    java如何读取excel文件

    Apache POI是Apache软件基金会的一个开源项目,提供了处理Microsoft Office格式文件(如Excel)的API。它支持读取、写入和修改Excel文件。首先,我们需要添加Apache POI的依赖到我们的项目中,通常通过Maven或Gradle...

    java8源码-InfoScanner:Excel和CSV类型数据文件自动录入小工具

    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

    “Excel_Csv_Tool-master”这个项目很可能是一个Java实现的开源工具,用于处理Excel和CSV文件的转换及操作。项目可能包含了以下功能: 1. Excel到CSV的转换:读取Excel文件,将其内容转换为CSV格式,并保存到新的...

    java 读取 Excel 读取 兼容2003,2007

    5. 第三方库:如OpenCSV、SuperCSV等 这些库主要针对CSV格式,但可以作为读取Excel的一种间接方式,特别是当Excel文件仅包含一列或多列数据时。 总结,Java开发者可以通过Apache POI库实现对Excel 2003 (.xls) 和 ...

    java常用第三方软件包大全_.docx

    13. **Super CSV**:用于CSV文件的读写,提供了强大的功能和灵活性。 14. **com4j**:允许Java调用COM组件,用于与Windows平台的交互。 15. **util.concurrent**:Java并发开发包,包含高级并发工具,如并发集合、...

    Super-Strings Tool-开源

    标题 "Super-Strings Tool-开源" 指的是一款名为 "Super-Strings Tool" 的开源软件工具,专门用于处理字符串相关的任务。开源意味着该软件的源代码是公开的,允许用户自由查看、修改和分发,社区中的开发者可以贡献...

    jacoco获取exec和获取report

    JaCoCo(Java Code Coverage)是一个广泛使用的开源代码覆盖率工具,专门针对Java应用程序。它提供了简单的API和Maven、Gradle等构建工具的插件,使得开发者能够轻松地集成到自己的项目中,以测量单元测试的代码覆盖...

    SuperCoder:手动PLP视线编码-开源

    SuperCoder是一款专门用于手动编码数字视频文件中视线数据的开源工具,它的出现为研究者和开发者提供了一个灵活且可定制的平台,以实现对视线数据的高效处理。 PLP视线编码主要由两个核心部分组成:瞳孔定位(Pupil...

    完整版超级列表框选中项存为Excel文件.rar

    标题中的“完整版超级列表框选中项存为Excel文件”指的是一个软件功能或编程实践,它涉及到在用户界面中使用超级列表框(Super ListBox)控件,这种控件通常用于展示大量数据,并允许用户进行多选操作。当用户选择了...

    PMSL - Project Management Super Light-开源

    本文将详细介绍一款名为"PMSL - Project Management Super Light"的开源项目管理工具,它以其轻量级的特性,为用户提供了一种简单易用、功能丰富的解决方案。 PMSL是一款基于Web的应用,其核心设计理念是简洁与实用...

    Java表格

    总结,Java提供了丰富的工具和库来处理表格,无论是创建用户界面还是处理Excel和CSV文件。开发者可以根据项目需求选择合适的框架和库,利用Java的强大功能实现功能丰富的表格应用。理解并掌握这些知识点,将有助于...

    B3助手_20201229.zip

    7. **SuperSocket.SocketBase.dll**和**SuperSocket.SocketEngine.dll**:这两个文件属于SuperSocket库,用于网络通信,可能支持B3助手与远程服务器或设备的实时交互。 8. **CsvHelper.dll**:这是一个CSV数据处理...

    nutty-cuckoo-super-kings:Nutty Cuckoo Super Kings网站

    【标题】:“nutty-cuckoo-super-kings”是一个以“Nutty Cuckoo Super Kings”为主题的项目,这可能是一个虚构的社交板球团队的数据分析平台。该项目旨在收集、处理并展示该板球队的详细统计数据,从而为球迷、分析...

    气温预测项目数据集,用于机器学习回归任务入门案例使用

    文件"temps.csv"很可能包含了历史气温记录,每一行代表一个时间点的数据,列可能包括日期、地点、最高气温、最低气温、平均气温等信息。在开始分析之前,我们需要导入Python的数据处理库,如Pandas,来读取和预处理...

Global site tag (gtag.js) - Google Analytics