一、csv文件
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。
CSV是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。最广泛的应用是在程序之间转移表格数据,而这些程序本身是在不兼容的格式上进行操作的(往往是私有的和/或无规范的格式)。因为大量程序都支持某种CSV变体,至少是作为一种可选择的输入/输出格式。
“CSV”泛指具有以下特征的任何文件:
纯文本,使用某个字符集,比如ASCII、Unicode、EBCDIC或GB2312;由记录组成(典型的是每行一条记录);每条记录被分隔符分隔为字段(典型分隔符有逗号、分号或制表符;有时分隔符可以包括可选的空格);每条记录都有同样的字段序列。二、示例
相关代码如下:
1packagecom.test.Excel;23importjava.io.BufferedWriter;4importjava.io.File;5importjava.io.FileOutputStream;6importjava.io.IOException;7importjava.io.OutputStreamWriter;8importjava.net.URLEncoder;9importjava.util.ArrayList;10importjava.util.Arrays;11importjava.util.Date;12importjava.util.List;1314importorg.junit.Test;1516/**17* 创建CSV文件18*/19publicclassCSVCrate {2021/**22* 创建CSV文件23*/24@Test25publicvoidcreateCSV() {2627//表格头28Object[] head = { "客户姓名", "证件类型", "日期", };29List<Object> headList =Arrays.asList(head);3031//数据32List<List<Object>> dataList =newArrayList<List<Object>>();33List<Object> rowList =null;34for(inti = 0; i < 100; i++) {35rowList =newArrayList<Object>();36rowList.add("张三" +i);37rowList.add("263834194" +i);38rowList.add(newDate());39dataList.add(rowList);40}4142String fileName = "testCSV.csv";//文件名称43String filePath = "c:/test/";//文件路径4445File csvFile =null;46BufferedWriter csvWtriter =null;47try{48csvFile =newFile(filePath +fileName);49File parent =csvFile.getParentFile();50if(parent !=null&& !parent.exists()) {51parent.mkdirs();52}53csvFile.createNewFile();5455//GB2312使正确读取分隔符","56csvWtriter =newBufferedWriter(newOutputStreamWriter(newFileOutputStream(csvFile), "GB2312"), 1024);5758//文件下载,使用如下代码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);6364intnum = headList.size() / 2;65StringBuffer buffer =newStringBuffer();66for(inti = 0; i < num; i++) {67buffer.append(" ,");68}69csvWtriter.write(buffer.toString() + fileName +buffer.toString());70csvWtriter.newLine();7172//写入文件头部73writeRow(headList, csvWtriter);7475//写入文件内容76for(List<Object>row : dataList) {77writeRow(row, csvWtriter);78}79csvWtriter.flush();80}catch(Exception e) {81e.PRintStackTrace();82}finally{83try{84csvWtriter.close();85}catch(IOException e) {86e.printStackTrace();87}88}89}9091/**92* 写一行数据93*@paramrow 数据列表94*@paramcsvWriter95*@throwsIOException96*/97privatestaticvoidwriteRow(List<Object> row, BufferedWriter csvWriter)throwsIOException {98for(Object data : row) {99StringBuffer sb =newStringBuffer();100String rowStr = sb.append("\"").append(data).append("\",").toString();101csvWriter.write(rowStr);102}103csvWriter.newLine();104}105}