supercsv读写CSV、TSV文件实例教程

先简单介绍下CSV和TSV文件的区别:

TSV ,Tab-separated values的缩写,即制表符分隔值。关于TSV标准,参考:http://en.wikipedia.org/wiki/Tab-separated_values CSV,Comma-separated values,即逗号分隔值。关于CSV标准,参考:http://en.wikipedia.org/wiki/Comma-separated_values

项目需要把原有的tsv文件数据整理一下形成更方便使用的新tsv文件(加几列)。涉及到tsv文件的读写。其实自己实现也是很简单的功能,不过正好有现成的工具包supercsv,就拿来用用试试。 官网地址:http://supercsv.sourceforge.net/index.html

文档可以说是清晰明了,网上其实也有不少用supercsv解析csv文件的例子,不过从tsv和csv的区别就可以看出,完全一套代码是可以解决的,只要换个分隔符就好饿了。supercsv里,也确实做到了。 先附上官网的例子:http://supercsv.sourceforge.net/examples_reading.html

解析的csv文件:

ustomerNo,firstName,lastName,birthDate,mailingAddress,married,numberOfKids,favouriteQuote,email,loyaltyPoints 1,John,Dunbar,13/06/1945,"1600 Amphitheatre Parkway Mountain View, CA 94043 United States",,,"""May the Force be with you."" - Star Wars",jdunbar@gmail.com,0 2,Bob,Down,25/02/1919,"1601 Willow Rd. Menlo Park, CA 94025 United States",Y,0,"""Frankly, my dear, I don't give a damn."" - Gone With The Wind",bobdown@hotmail.com,123456 3,Alice,Wunderland,08/08/1985,"One Microsoft Way Redmond, WA 98052-6399 United States",Y,0,"""Play it, Sam. Play ""As Time Goes By."""" - Casablanca",throughthelookingglass@yahoo.com,2255887799 4,Bill,Jobs,10/07/1973,"2701 San Tomas Expressway Santa Clara, CA 95050 United States",Y,3,"""You've got to ask yourself one question: ""Do I feel lucky?"" Well, do ya, punk?"" - Dirty Harry",billy34@hotmail.com,36

利用MapReader方式解析的代码:

 代码如下 复制代码
<pre class="brush:java">
/**
 * An example of reading using CsvMapReader.
 */
private static void readWithCsvMapReader() throws Exception {

    ICsvMapReader mapReader = null;
    try {
            mapReader = new CsvMapReader(new FileReader(CSV_FILENAME), CsvPreference.STANDARD_PREFERENCE);
           
            // the header columns are used as the keys to the Map
            final String[] header = mapReader.getHeader(true);
            final CellProcessor[] processors = getProcessors();
           
            Map&lt;String, Object&gt; customerMap;
            while( (customerMap = mapReader.read(header, processors)) != null ) {
                    System.out.println(String.format("lineNo=%s, rowNo=%s, customerMap=%s", mapReader.getLineNumber(),
                            mapReader.getRowNumber(), customerMap));
            }
           
    }
    finally {
            if( mapReader != null ) {
                    mapReader.close();
            }
    }}

/**
 * Sets up the processors used for the examples. There are 10 CSV columns, so 10 processors are defined. Empty
 * columns are read as null (hence the NotNull() for mandatory columns). * * @return the cell processors
 */
private static CellProcessor[] getProcessors() {

    final String emailRegex = "[a-z0-9._]+@[a-z0-9.]+"; // just an example, not very robust!
    StrRegEx.registerMessage(emailRegex, "must be a valid email address");
   
    final CellProcessor[] processors = new CellProcessor[] {
            new UniqueHashCode(), // customerNo (must be unique)
            new NotNull(), // firstName
            new NotNull(), // lastName
            new ParseDate("dd/MM/yyyy"), // birthDate
            new NotNull(), // mailingAddress
            new Optional(new ParseBool()), // married
            new Optional(new ParseInt()), // numberOfKids
            new NotNull(), // favouriteQuote
            new StrRegEx(emailRegex), // email
            new LMinMax(0L, LMinMax.MAX_LONG) // loyaltyPoints
    };
   
    return processors;}
</pre>

样例的代码恐怕清楚的不能再清楚了。只需要解释一点,分隔符是通过CsvPreference.STANDARD_PREFERENCE设定的。如果想要解析TSV文件,只需要将这里换成CsvPreference TAB_PREFERENCE即可。

附个源码吧:

 代码如下 复制代码
<pre class="brush:java">
/**
 * Ready to use configuration that should cover 99% of all usages.
 */
public static final CsvPreference STANDARD_PREFERENCE = new CsvPreference.Builder(‘”’ , ‘,’,”rn”).build();

  /**
  * Ready to use configuration for Windows Excel exported CSV files.
  */
  public static final CsvPreference EXCEL_PREFERENCE = new CsvPreference.Builder('"' , ',' , "n").build();
 
  /**
  * Ready to use configuration for north European excel CSV files (columns are separated by ";" instead of ",")
  */
  public static final CsvPreference EXCEL_NORTH_EUROPE_PREFERENCE = new CsvPreference.Builder('"' , ';' , "n" ).build();
 
  /**
  * Ready to use configuration for tab -delimited files.
  */
  public static final CsvPreference TAB_PREFERENCE = new CsvPreference.Builder( '"', 't', "n").build();

</pre>

时间: 2024-09-20 08:07:34

supercsv读写CSV、TSV文件实例教程的相关文章

php 读取,删除,写入文件实例教程

php 读取,删除,写入文件实例教程 //-------------------------------删除文件 function DelFiletext($filename){  @unlink($filename); } //---------------------------------取得文件内容 function ReadFiletext($filepath){  $htmlfp=@fopen($filepath,"r");  while($data=@fread($htm

PHP文件读写操作之文件写入教程

在PHP网站开发中,存储数据通常有两种方式,一种以文本文件方式存储,比如txt文件,一种是以数据库方式存储,比如Mysql,相对于数据库存储,文件存储并没有什么优势,但是文件读写操作在基本的PHP开发中还是时有使用,今天和大家分享如何利用PHP技术实现文件读写之文件写入操作教程,也算是对PHP文件读写操作的入门学习. 将数据写入文件的操作主要涉及三个步骤及部分文件操作函数如下: 1.打开文件(文件操作函数:fopen) 2.写入文件(文件操作函数:fwrite等) 3.关闭文件(文件操作函数:f

php的SimpleXML方法读写XML接口文件实例解析_php技巧

在php5中读写xml文档是非常方便的,可以直接使用php的SimpleXML方法来快速解析与生成xml格式的文件,下面举例说明: 创建一个SimpleXML对象有三种方法: 1.使用new关键字创建 复制代码 代码如下: $xml="<personinfo><item><id>1</id><name>aaa</name><age>16</age></item><item>&l

Java如何高效的读取大文件实例教程

       1.概述 本教程将演示如何用Java高效地读取大文件,这些大文件操作虽然不是很常用,但是如果有项目要用到的话就有用武之地了. 2.在内存中读取 读取文件行的标准方式是在内存中读取,Guava 和Apache Commons IO都提供了如下所示快速读取文件行的方法: Files.readLines(new File(path), Charsets.UTF_8); FileUtils.readLines(new File(path)); 这种方法带来的问题是文件的所有行都被存放在内存

PHP跨网域跨主机跨server上传文件实例教程

如何跨网域跨主机跨server上传文件?一般最基本的上传方式是: 1.使用者把文件上传到 web server 2. web server 把上传的文件 利用 move_uploaded_file() 函式,将档案移到指定的文件夹内 但是,有时候我们需要把上传的档案放到另一台专门放文件的 file server,这时候,就无法利用 move_uploaded_file() 去搬移文件了,而需要利用 ftp 去传送文件至 file server,方法很简单... 直接看程式码:    代码如下 复

PHP文件读写操作之文件读取方法详解_php技巧

PHP文件读取操作相对于文件写入操作涉及更多的PHP文件操作函数,在代码实例中会详细介绍这些函数. 读取文本文件中存储数据的方式主要涉及的三个步骤及部分文件操作函数如下: 1.打开文件(文件操作函数:fopen) 2.文件数据读取(文件操作函数:fgets.file.readfile.feof等) 3.关闭文件(文件操作函数:fclose) 下面仍然以PHP文件读写操作代码实例讲解文件读取方法的具体应用,在实例中,通过调用不同的PHP文件读取操作函数读取文本文件中的数据,你可以加深PHP文件读取

java 文件读写实例(读写csv文件)

不能直接用   File file = new File("http://127.0.0.1:8080/aa.txt") 来读取,因为网络上的传输协议为HTTP,与本地不同,要用URL来读取  代码如下 复制代码        String output="";         File file = new File("E://bb.txt");             URL MyURL = new URL("http://127.

asp.net读写txt文件实例

asp教程.net读写txt文件实例   <%@ page language="vb" %> <html>    <head>       <title>unload event example</title>       <script runat="server">          dim thefile as system.io.streamreader          sub pag

在Python的Django框架中用流响应生成CSV文件的教程

  这篇文章主要介绍了在Python的Django框架中用流响应生成CSV文件的教程,作者特别讲到了防止CSV文件中的中文避免出现乱码等问题,需要的朋友可以参考下 在Django里,流式响应StreamingHttpResponse是个好东西,可以快速.节省内存地产生一个大型文件. 目前项目里用于流式响应的一个是Eventsource,用于改善跨系统通讯时用户产生的慢速的感觉.这个不细说了. 还有一个就是生成一个大的csv文件. 当Django进程处于gunicorn或者uwsgi等web容器中