你的位置:首页 > Java教程

[Java教程]java 生成 csv文件


 一、csv文件

  逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。
CSV是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。最广泛的应用是在程序之间转移表格数据,而这些程序本身是在不兼容的格式上进行操作的(往往是私有的和/或无规范的格式)。因为大量程序都支持某种CSV变体,至少是作为一种可选择的输入/输出格式。

“CSV”泛指具有以下特征的任何文件:

  • 纯文本,使用某个字符集,比如ASCII、Unicode、EBCDIC或GB2312;
  • 由记录组成(典型的是每行一条记录);
  • 每条记录被分隔符分隔为字段(典型分隔符有逗号、分号或制表符;有时分隔符可以包括可选的空格);
  • 每条记录都有同样的字段序列。

二、示例

  相关代码如下:

 1 package com.test.excel; 2  3 import java.io.BufferedWriter; 4 import java.io.File; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.OutputStreamWriter; 8 import java.net.URLEncoder; 9 import java.util.ArrayList; 10 import java.util.Arrays; 11 import java.util.Date; 12 import java.util.List; 13  14 import org.junit.Test; 15  16 /** 17  * 创建CSV文件 18 */ 19 public class CSVCrate { 20  21   /** 22    * 创建CSV文件 23   */ 24   @Test 25   public void createCSV() { 26      27     // 表格头 28     Object[] head = { "客户姓名", "证件类型", "日期", }; 29     List<Object> headList = Arrays.asList(head); 30  31     //数据 32     List<List<Object>> dataList = new ArrayList<List<Object>>(); 33     List<Object> rowList = null; 34     for (int i = 0; i < 100; i++) { 35       rowList = new ArrayList<Object>(); 36       rowList.add("张三" + i); 37       rowList.add("263834194" + i); 38       rowList.add(new Date()); 39       dataList.add(rowList); 40     } 41      42     String fileName = "testCSV.csv";//文件名称 43     String filePath = "c:/test/"; //文件路径 44      45     File csvFile = null; 46     BufferedWriter csvWtriter = null; 47     try { 48       csvFile = new File(filePath + fileName); 49       File parent = csvFile.getParentFile(); 50       if (parent != null && !parent.exists()) { 51         parent.mkdirs(); 52       } 53       csvFile.createNewFile(); 54  55       // GB2312使正确读取分隔符"," 56       csvWtriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(csvFile), "GB2312"), 1024); 57        58       //文件下载,使用如下代码 59 //      response.setContentType("application/csv;charset=gb18030"); 60 //      response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8")); 61 //      ServletOutputStream out = response.getOutputStream(); 62 //      csvWtriter = new BufferedWriter(new OutputStreamWriter(out, "GB2312"), 1024); 63        64       int num = headList.size() / 2; 65       StringBuffer buffer = new StringBuffer(); 66       for (int i = 0; i < num; i++) { 67         buffer.append(" ,"); 68       } 69       csvWtriter.write(buffer.toString() + fileName + buffer.toString()); 70       csvWtriter.newLine(); 71  72       // 写入文件头部 73       writeRow(headList, csvWtriter); 74  75       // 写入文件内容 76       for (List<Object> row : dataList) { 77         writeRow(row, csvWtriter); 78       } 79       csvWtriter.flush(); 80     } catch (Exception e) { 81       e.printStackTrace(); 82     } finally { 83       try { 84         csvWtriter.close(); 85       } catch (IOException e) { 86         e.printStackTrace(); 87       } 88     } 89   } 90    91   /** 92    * 写一行数据 93    * @param row 数据列表 94    * @param csvWriter 95    * @throws IOException 96   */ 97   private static void writeRow(List<Object> row, BufferedWriter csvWriter) throws IOException { 98     for (Object data : row) { 99       StringBuffer sb = new StringBuffer();100       String rowStr = sb.append("\"").append(data).append("\",").toString();101       csvWriter.write(rowStr);102     }103     csvWriter.newLine();104   }105 }