现在的位置: 首页 > 综合 > 正文

java操作csv文件

2018年02月03日 ⁄ 综合 ⁄ 共 4026字 ⁄ 字号 评论关闭

 

 

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包分别存放到开发工程的类路径下面即可使用。

coreshare:

//read and parse a CSV file

    CSVReader reader = new CSVReader(new FileReader("yourfile.csv"));
    String [] nextLine;
    while ((nextLine = reader.readNext()) != null) {
        // nextLine[] is an array of values from the line
        System.out.println(nextLine[0] + nextLine[1] + "etc...");
    }
          
Or, if you might just want to slurp the whole lot into a List, just call readAll()...

    CSVReader reader = new CSVReader(new FileReader("yourfile.csv"));
    List myEntries = reader.readAll();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//write csv files with opencsv
CSVWriter writer = new CSVWriter(new FileWriter("yourfile.csv"), '/t');
     // feed in your array (or convert your data to an array)
     String[] entries = "first#second#third".split("#");
     writer.writeNext(entries);
	writer.close();
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//dump out SQL tables to CSV
java.sql.ResultSet myResultSet = ....
writer.writeAll(myResultSet, includeHeaders);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//to bind my CSV file to a list of Javabeans
ColumnPositionMappingStrategy strat = new ColumnPositionMappingStrategy();
strat.setType(YourOrderBean.class);
String[] columns = new String[] {"name", "orderNumber", "id"}; // the fields to bind do in your JavaBean
strat.setColumnMapping(columns);

CsvToBean csv = new CsvToBean();
List list = csv.parse(strat, yourReader);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           

 

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();

代码如下:

   publicstaticvoidmain(String[] args)throwsException {

       CsvWriter csvWriter =newCsvWriter(newFileWriter("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

----------------------------------------------------------------------------------------------------------------------------------------------

利用jsp导出csv文件

jsp编写如下:

<%@page contentType="application/vnd.ms-csv; charset=GBK" language="java"%><% response.setHeader("Content-disposition","attachment; filename=check_charge.csv;style=vnd.ms-csv.numberformat:@");%><%@ taglib prefix="s" uri="/struts-tags"%><s:iterator value="pageIlChargeLogList"><s:property value="ilUser.iptvId" />,<s:date name="chargeTime" format="yyyyMMddHHmmss"/>,ITV福彩充值,<s:property value="chargeMoney" />
</s:iterator>

action return 此页面即可导出

抱歉!评论已关闭.