Java 解析CSV文件 CSV解析

需求背景

从一个数据库导出一个表的数据,导出文件为CSV文件;需要将数据导入到本地开发环境的数据库里面。CSV文件已经有了,需要解析读CSV文件,并导入进数据库。本文主要研究第一部分,自己写代码解析CSV文件。
Java中可以找到Jar包,工具类,直接使用。也不用自己手工写解析。如果有更成熟的工具,建议直接使用。本文作者写的,只有自己测试过,如果有bug,欢迎留言,不一定及时回。

CSV文件规则

以纯文本形式存储表格数据(数字和文本)。
记录间以换行符分隔;每条记录由字段组成,字段间的分隔符是逗号。
注意:
1、字段中包含有逗号,有换行符,该字段必须用双引号括起来;
2、字段中的双引号用两个双引号表示;
以上提到的逗号和双引号均为半角字符。
如果只是简单的逗号分割,那么就很简单。本文主要研究的就是,有特殊字符作为字段的值,上面注意中的情况出现的情况下,文件的解析。

CSV规则有遗漏的,或者逻辑不完善,能导致歧义的数据案例,评论指出,感谢!

准备测试数据

可以新建一个test.csv文件,用Excel输入值,然后文本打开,观察值。注意包含以下测试案例:

  1. 正常数据
  2. 空数据
  3. 文本有逗号
  4. 文本有引号
  5. 文本中有换行
    例如: Excel视图

文本视图

好的测试数据是开发的前提。习惯先准备,罗列测试数据的所有情况,再开发。开发的时候考虑的更全面。开发也可以分类,从解析简单情况开始。

代码


    /**
     * 解析CSV字符行集合
     * @param lines java 自带的读文件流,按换行符分割的,每行是集合的一个元素
     * @return 解析完的结果集合;List<List<String>> resList 所有行是一个集合, 每行的所有字段是一个集合。
     */
    public static List<List<String>> spiltCSVString(List<String> lines) {
   
        List<String> oneLine = new ArrayList<String>();
        List<List<String>> resList = new ArrayList<>();
        if (lines.isEmpty() || lines.size() == 0) {
   
            return resList;
        }
        String tempStr = "";
        char specialChar = '\"';
        char splitChar = ',';
        boolean specialFlag = false;
        for (int i = 0; i < lines.size(); i++) {
   
            String line = lines.get(i);
            if (line.indexOf(specialChar) < 0) {
   
                oneLine = new ArrayList<String>();
                for (int j = 0; j < line.toCharArray().length; j++) {
   
                    if (line.charAt(j) == splitChar) {
   
                        oneLine.add(tempStr);
                        tempStr = "";
                        continue;
                    } else {
   
                        tempStr += line
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值