Java导出CSV文件

本文介绍了如何使用Java进行CSV格式文件的导出,详细讲解了CSV的定义、特点,并提供了一种导出实现的概述。

微信公众号:程序员Alex
关注可了解更多的编程知识。问题或建议,请公众号留言;
公众号回复加群即可加入刷题大队
欢迎一起加入刷题大队,
如果你觉得文章对你有帮助,欢迎转发分享

使用Java导出CSV格式文件

整理一波CSV导出的方法,希望可以帮到有需要的朋友

什么是CSV

CSV是一种通用的、相对简单的文件格式,其文件以纯文本形式存储表格数据(数字和文本)。

组号,组名,时间,电话0,时间0,电话1,时间1,电话2,时间2,
策四,name,random,null,18993897778,13,18993897709,13,null,null,
策2,name2,random,null,18993897776,13,18993897775,13,null,null,

CSV格式的特点

由于CSV是一种纯文本的文件,因此其具有以下几个特点

  • 支持追加模式写入,节省内存。
  • CSV的文件行数没有限制。
  • CSV是纯文本文件,可以使用任何文本编辑器进行编辑。

导出实现

工具类

public class CsvExportUtil {

    /**
     * CSV文件列分隔符
     */
    private static final String CSV_COLUMN_SEPARATOR = ",";

    /**
     * CSV文件行分隔符
     */
    private static final String CSV_ROW_SEPARATOR = "\r\n";

    /**
     * @param dataList 集合数据
     * @param titles   表头部数据
     * @param keys     表内容的键值
     * @param os       输出流
     */
    public static void doExport(List<Map<String, Object&g
Java实现导出CSV文件有以下两种常见场景: ### 导出到本地文件 可以直接通过输出流进行相应的数据导出,要注意“,”的问题,因为CSV文件是以逗号进行判断每个单元格。以下是示例代码: ```java import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; public class CsvExporter { /** * 导出cvs * @param headers * @param infos * @param csvFile */ public void exportCvs(String[] headers, List<LinkedHashMap<String, Object>> infos, String csvFile) { try (BufferedWriter bw = new BufferedWriter(new FileWriter(csvFile))) { // 写入表头 bw.write(String.join(",", headers)); bw.newLine(); // 写入数据 for (Map<String, Object> info : infos) { List<String> valueList = new ArrayList<>(); for (Object value : info.values()) { if (value == null) { valueList.add(""); } else { valueList.add(value.toString()); } } for (Object data : valueList) { StringBuffer sb = new StringBuffer(); String rowStr = sb.append("\"").append(data).append("\",").toString(); bw.write(rowStr); } bw.newLine(); } } catch (IOException e) { e.printStackTrace(); } } } ``` 调用示例: ```java import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; public class Main { public static void main(String[] args) { CsvExporter exporter = new CsvExporter(); String[] headers = {"Name", "Age"}; List<LinkedHashMap<String, Object>> infos = new ArrayList<>(); LinkedHashMap<String, Object> info1 = new LinkedHashMap<>(); info1.put("Name", "John"); info1.put("Age", 25); infos.add(info1); LinkedHashMap<String, Object> info2 = new LinkedHashMap<>(); info2.put("Name", "Jane"); info2.put("Age", 30); infos.add(info2); String csvFile = "test.csv"; exporter.exportCvs(headers, infos, csvFile); } } ``` ### Web下载CSV Web下载CSV的原理和输出到本地一致,就是将`HttpServletResponse`的流内容(writer)写入到浏览器,前提是该`response`的`header`中`content-Type`要告诉浏览器以下载模式接受,具体参数参见http://blog.youkuaiyun.com/bluefish625/article/details/6659288 [^2]。 ### 编码问题 Excel在读取CSV的时候是通过读取文件头上的BOM来识别编码的,这导致如果生成CSV文件的平台输出无BOM头编码的CSV文件(例如UTF - 8,在标准中默认是可以没有BOM头的),Excel只能自动按照默认编码读取,不一致就会出现乱码问题 [^3]。
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值