java 生成 csv文件

简介: 一、csv文件   逗号分隔值(Comma-Separated Values,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 }

 

目录
相关文章
|
2月前
|
IDE Java 编译器
使用Java分割PDF文件
使用Java分割PDF文件
42 1
|
5天前
|
Java
java网络编程 UDP通信协议实现局域网内文件的发送和接收
java网络编程 UDP通信协议实现局域网内文件的发送和接收
java网络编程 UDP通信协议实现局域网内文件的发送和接收
|
6天前
|
存储 Java 数据库连接
Java类文件结构及类加载机制
该文章主要讨论了Java类文件的结构以及Java类的加载机制,并提到了双亲委派模型的相关内容。
Java类文件结构及类加载机制
|
7天前
|
Java PHP 数据安全/隐私保护
Java——IDEA如何运行单个文件
Java——IDEA如何运行单个文件
16 1
Java——IDEA如何运行单个文件
|
4天前
|
存储 安全 Java
"Java编码魔法:揭秘图片与文件的Base64神秘转换术,让数据在指尖跳跃!"
【8月更文挑战第16天】Base64编码在Java开发中常用于将二进制数据如图片转换为ASCII字符串以便传输。编码使用64个字符及等号填充,每3字节数据编码为4个字符。Java利用`java.util.Base64`类实现此功能:读取图片或文件为字节数组后进行编码。解码时将Base64字符串还原为字节数组并写入文件。需注意编码效率降低、不提供安全性及特殊字符兼容性等问题。掌握这些技巧有助于解决Web开发中的数据传输需求。
17 4
|
5天前
|
Java
java中实现File文件的重命名(renameTo)、将文件移动到其他目录下、文件的复制(copy)、目录和文件的组合(更加灵活方便)
这篇文章介绍了Java中使用`renameTo()`、`Files.copy()`等方法对文件进行重命名、移动和复制的操作,并提供了代码实例和测试效果。
java中实现File文件的重命名(renameTo)、将文件移动到其他目录下、文件的复制(copy)、目录和文件的组合(更加灵活方便)
|
7天前
|
Java 应用服务中间件 PHP
PHP——调用java文件中的方法
PHP——调用java文件中的方法
16 0
PHP——调用java文件中的方法
|
4天前
|
Java 编译器 开发者
JDK8到JDK23版本升级的新特性问题之编写一个简单的module-info.java文件,如何实现
JDK8到JDK23版本升级的新特性问题之编写一个简单的module-info.java文件,如何实现
|
5天前
|
Java
Java模拟文件发送给服务器,服务器将文件转发给其他用户,并保存到服务器本地,其他用户可以接收,并保存到本地磁盘,支持各种文件格式,并解决通信中服务器怎么区分客户端发来的文件类型
Java模拟文件发送给服务器,服务器将文件转发给其他用户,并保存到服务器本地,其他用户可以接收,并保存到本地磁盘,支持各种文件格式,并解决通信中服务器怎么区分客户端发来的文件类型
|
5天前
|
Java
Java 图片、文件 Base64 互转
Java 图片、文件 Base64 互转
10 0