随笔-16  评论-54  文章-0  trackbacks-0
 

 

1      基本介绍

可以说CSV格式的文件经常碰到,何为CSV格式,CVS全称comma-separated values,就是典型的用逗号隔开的文件,比如下面这种文件格式

Name,company

zhangsan,ibm

lisi,oracle

这种就是典型的CSV格式文件。不过也可以扩展到其它符号隔开的字符,比如

Name#company

Zhangsan#ibm

Lisi#oracle

这种也算CSV格式

Java开源框架CVSReader提供了一个轻量级、简单方便的统一操作接口可用,下面具体讲解如何操作CVS格式

2      安装和使用

2.1下载

目前CSV reader的最新发布版本是1.8。我们可以从

http://opencsv.sourceforge.net/

上面下载到最新的csvreader包。

2.2安装

直接把jar包分别存放到开发工程的类路径下面即可使用。

3      读取CSV格式文件

3.1基本简介

首先,读取CSV格式的文件需要创建一个CSVReader,如下

CsvReader reader = new CsvReader(Reader r,  char c);

其中第一个参数为读取文件,第二个参数为分割符,比如“,”,或者“#

另外,也有其它几个参数,可以查阅API,比如

CsvReader reader = new CsvReader(InputStream r,  char c, Charset charset);等等

其次,一般需要读取头信息,如下:

reader.readHeaders();

String[] headers = reader.getHeaders();

读取了后,指针就会移动到下一行,也就是可以开始读取文件内容

假如,有多行的话,可以用一个循环套入,例如下面:

             while (reader.readRecord()) {

                    for (int i = 0; i < headers.length; i++) {

                           String value = reader.get(headers[i]);

                           System.out.print(value+" ");

                    }

                    System.out.println("");

             }

3.2综合例子

C盘下创建一个测试文件test.cvs,内容如下:

a#b#c

1#2#3

4#5#6

下面是解析代码:

      public static void main(String[] args) throws Exception {

CsvReader reader = new CsvReader(new FileReader("c://csv.txt"), '#');

             reader.readHeaders();

             String[] headers = reader.getHeaders();

             while (reader.readRecord()) {

                    for (int i = 0; i < headers.length; i++) {

                           String value = reader.get(headers[i]);

                           System.out.print(value+" ");

                    }

                    System.out.println("");

             }

      }

运行以上程序,可以看到输出

 1 2 3

 4 5 6

4      CSV格式文件

CSV格式文件也比较简单,写每一列只要直接调用

csvWriter.write()即可

另外,写完每行结束后,都要调用 csvWriter.endRecord();

表示结束一行

文件写完毕后,要记得刷新一下并关掉,如下:

       csvWriter.flush();

       csvWriter.close();

代码如下:

    publicstaticvoid main(String[] args) throws Exception {

       CsvWriter csvWriter = new CsvWriter(new FileWriter("c://test.text"), '#');

       csvWriter.write("name");

       csvWriter.write("company");

       csvWriter.endRecord();

       csvWriter.write("11");

       csvWriter.write("12");

       csvWriter.endRecord();

       csvWriter.write("21");

       csvWriter.write("22");

       csvWriter.flush();

       csvWriter.close();

   }

}

运行以上程序,可以看到C盘下面创建了一个文件

test.text

内容如下:

name#company

11#12

21#22

posted on 2008-10-31 14:42 jspark 阅读(11787) 评论(3)  编辑  收藏

评论:
# re: 如何更方便地进行CSV格式文件读写 2008-11-01 16:58 | 金山毒霸2008
好像有一种文件,扩展明就是CSV,一种常见的文件格式。  回复  更多评论
  
# re: 如何更方便地进行CSV格式文件读写[未登录] 2008-11-05 17:03 | jinn
csv不就是一种文本吗,直接读文本文件的方式的就行了吧。
读:
List<String> list = org.apache.commons.io.FileUtils.readLines(new File("test.csv"));

写:
List list = new ArrayList();
list.add("name,company");
list.add("zhangsan","huipu");
org.apache.commons.io.FileUtils.writeLines(new File("test.csv"), list);
  回复  更多评论
  
# re: 如何更方便地进行CSV格式文件读写[未登录] 2008-11-07 09:06 | jspark
直接读取有下面几个问题:
1、你直接读取,还要自己去切割每行?另外,还要考虑空的情况
2、存在各种分割符

写的话也存在同样的问题,要自己拼符号,多麻烦。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问