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 }

Java生成CSV文件
本文介绍如何使用Java生成CSV文件,并提供了一个示例程序。该程序能够创建包含指定表头和数据的CSV文件。
1469

被折叠的 条评论
为什么被折叠?



