excel大数据量插入-svg解析插入

pom:
        <dependency>
            <groupId>com.opencsv</groupId>
            <artifactId>opencsv</artifactId>
            <version>4.6</version>
        </dependency>
CsvPosition:
package com.sdkj.exceltest.annotation;

import java.lang.annotation.*;

/**
 * @author javachen
 * @version 1.0.0
 */
@Documented
@Target(ElementType.FIELD)
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface CsvPosition{

    //索引位置
    public int index() default 0;

}
CsvUtils:
package com.sdkj.exceltest.utils;

import com.sdkj.exceltest.annotation.CsvPosition;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**
 * @author javachen
 * @description
 */
public class CsvUtils {

    @SuppressWarnings({ "rawtypes", "unchecked" })
    public static Object evalField(Object obj,String [] str) throws Exception {

        //判断实体类内容是否为空
        if(null == obj){
            return "";
        }

        //获取实体类对象class
        Class objClass = obj.getClass();

        //获取类声明的变量
        Field[] objFieldArray = objClass.getDeclaredFields();

        //进行比对处理
        for (int i = 0; i < objFieldArray.length; i++) {

            Field objField = objFieldArray[i];

            //获取对象的自定义注解内容
            CsvPosition csvPosition = objField.getAnnotation(CsvPosition.class);

                //判断变量是否有自定义注解
                boolean flag = objField.isAnnotationPresent(CsvPosition.class);

                    if(flag){

                        //获取变量名称
                        String fieldName = objField.getName();

                        //获取变量的get set方法
                        String setMethodName = "set"+fieldName.substring(0, 1).toUpperCase()+fieldName.substring(1);

                        Field field = obj.getClass().getDeclaredField(fieldName);
                        Method setMethod = obj.getClass().getDeclaredMethod(setMethodName,
                                field.getType());
                        setMethod.invoke(obj, str[csvPosition.index()]);

                    }
        }

        return obj;
    }

}
ExcelTest:
package com.sdkj.exceltest.entity;

import com.sdkj.exceltest.annotation.CsvPosition;
import lombok.Data;

import java.io.Serializable;

@Data
public class ExcelTest implements Serializable {

    @CsvPosition(index = 0)
    private String id;

    @CsvPosition(index = 1)
    private String jgmc;

    @CsvPosition(index = 2)
    private String gmc;

}
test:
 @Test
    public void test5() {
        Integer SIZE = 1000;
        String path = "D://test001.csv";

        try {
            DataInputStream in = new DataInputStream(new FileInputStream(new File(path)));

            CSVReader csvReader = new CSVReader(new InputStreamReader(in, "utf-8"), CSVParser.DEFAULT_SEPARATOR,
                    CSVParser.DEFAULT_QUOTE_CHARACTER, CSVParser.DEFAULT_ESCAPE_CHARACTER, 2);

            String[] strs;

            List<ExcelTest> list = new ArrayList<>();

            int i = 0;
            while ((strs = csvReader.readNext()) != null) {

                ExcelTest excelTest = new ExcelTest();
                excelTest= (ExcelTest) CsvUtils.evalField(excelTest,strs);
                list.add(excelTest);
                i++;
                // 当 list 到达单批次最大数量后,执行保存数据操作,并清空list
                if (i==SIZE){
                    excelTestService.batchAdd(list);
                    list.clear();
                    i = 0;
                }
            }

            // 跳出循环后,判断里面有没有数据 防止有数据遗漏
            if (null!=list&&list.size()>0){
                excelTestService.batchAdd(list);
            }
            // 关闭流
            csvReader.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

javachen__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值