java导出csv文件串行_java 导出CSV文件踩坑记

本文介绍了作者在使用Java导出CSV文件时遇到的中文乱码、数据错行、数据错列、日期格式显示不正确等问题,以及如何通过添加BOM、处理特殊字符和限制单元格字符数等方法解决问题的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CSV简介

CSV全称是:Comma Separated Values (逗号分隔值)或者 Character Separated Values(字符分隔值)。其文件以纯文本形式存储表格数据(数字和文本)。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。每一行记录位于一个单独的行上,用回车换行符CRLF(也就是\r\n)分割。

对于excel来说默认使用 ,进行分割数据。

每一行记录最后一个字段后不能跟逗号

每一行一条记录

列为空需要指定 ""

用回车换行符CRLF(\r\n)分割每条记录

纯文本,使用某个字符集,比如ASCII、Unicode、EBCDIC或GB2312;

上面的内容从百科上总结(抄袭)的。

我的踩坑经历

之前做了一个CSV导出的小功能,然后踩了很多坑。最后蓦然回首,发现真的好简单,自己给自己挖了很多坑,简单的功能被自己弄的异常复杂。

作为一个聪明的程序员,我肯定不会重复造轮子,就在网上随便找了一份代码。然后噩梦从此开始。

我比较懒,所以使用反射来减轻我的工作量

我的最初版本

public class ExportCSVUtil{

private Class cls;//数据类型

private List list; //存放需要填充的数据

private List methods;//存储get方法

/**

*

* @param list 填充数据

* @param cls 数据类型

* @throws Exception

*/

public ExportCSVUtil(List list,Class cls) throws Exception{

this(list,cls,true);

}

public void doExport(OutputStream out) throws IOException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {

OutputStreamWriter outputStreamWriter =new OutputStreamWriter(out,"utf8");

BufferedWriter writer = new BufferedWriter(outputStreamWriter);//使用缓冲流,比较适合写文本操作,效率可能也会高些

writeBody(writer,list);

outputStreamWriter.flush();

outputStreamWriter.close();

}

/**

*向输出流中写数据

* @param list 填充数据

* @param writer 缓冲流

*/

public void writeBody(BufferedWriter writer,List list){

int i=0;

int length = methods.length;

for(T obj: list){

for(Method method: methods){

Object result= method.invoke(obj,new Object[]);反射获取get方法的值

String str=null;

if(result==null) //处理空值

str=" ";

else

str=result.toString();

if(i++ <=length-1)

writer.write(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值