首页天道酬勤java从数据库导出csv,Java解析csv文件乱码

java从数据库导出csv,Java解析csv文件乱码

张世龙 05-12 11:57 23次浏览

项目需求,读取csv文件并将日志数据保存到数据库中:
首先,建表然后对应的xml、dao、实体类、service和实现类。
上实现代码:

package cn.util.controller;import cn.util.entity.TlVacuumFurnaceLog;import cn.util.service.vfService;import cn.util.service.vfServiceImpl;import org.springframework.beans.factory.BeanFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.orm.hibernate5.SpringBeanContainer;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.FileReader;import java.io.InputStreamReader;import java.lang.reflect.Field;import java.lang.reflect.Method;import java.math.BigDecimal;import java.util.ArrayList;import java.util.List;@Controllerpublic class testC { @Autowired private vfService vfService; // 对应的保存接口/** * 导入csv文件处理 */ @RequestMapping("/test1312") public void test1(){ try { // 读取文件 “GBK”解决文件里中文乱码 BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("C:\\Users\\Administrator\\Desktop\\真空炉日志20210407StatusLog.csv"), "GBK")); reader.readLine();//第一行信息是标题信息,跳过,如果需要第一行信息,请删除这行代码 String line ;// 定义list,方便后面批次新增 TlVacuumFurnaceLog是表实体类 List<TlVacuumFurnaceLog> result = new ArrayList<>(); // 循环每行数据 while ((line = reader.readLine()) != null) { // 分割字符串 String item[] = line.split(","); if (item.length >0) { // 调用下面的方法,将每列数据赋值到对应的属性中,返回的结果新增到list内 result.add(propertiesAssignment(item)); } } // 保存到数据库 insertDB(result); } catch(Exception e){ e.printStackTrace(); } }/** * 将行数据中每列数据分别添加到对应的属性中,返回实体类 */ public TlVacuumFurnaceLog propertiesAssignment(String[] item) throws Exception{ // 获取目标类class Class<TlVacuumFurnaceLog> clazz = TlVacuumFurnaceLog.class; // 实例化 TlVacuumFurnaceLog tlVacuumFurnaceLog = clazz.newInstance(); // 获取对象全部属性 Field[] fields = clazz.getDeclaredFields(); // 循环遍历 当前行数据的列数 for (int i = 0; i < item.length; i++) { // 获取方法名 String methodName = "set" + fields[i+1].getName().substring(0,1).toUpperCase() + fields[i+1].getName().substring(1); // 获取Method参数 Method method = clazz.getMethod(methodName, fields[i+1].getType()); // 判断当前属性是什么类型的,将数据进行类型转换 if ("Integer".equals(fields[i+1].getType().getSimpleName())){ method.invoke(tlVacuumFurnaceLog,Integer.parseInt(item[i])); } else if ("BigDecimal".equals(fields[i+1].getType().getSimpleName())){ method.invoke(tlVacuumFurnaceLog, new BigDecimal(item[i])); } else if ("Short".equals(fields[i+1].getType().getSimpleName())){ method.invoke(tlVacuumFurnaceLog,Short.valueOf(item[i])); } else if ("Double".equals(fields[i+1].getType().getSimpleName())){ method.invoke(tlVacuumFurnaceLog,Double.valueOf(item[i])); } else if ("Byte".equals(fields[i+1].getType().getSimpleName())){ method.invoke(tlVacuumFurnaceLog,Byte.valueOf(item[i])); } else if ("String".equals(fields[i+1].getType().getSimpleName())){ method.invoke(tlVacuumFurnaceLog,item[i]); } } return tlVacuumFurnaceLog; }/** * 保存数据到数据库 */ public void insertDB(List<TlVacuumFurnaceLog> tlVacuumFurnaceLogs){ // 批量保存 vfService.saveBatch(tlVacuumFurnaceLogs); } }

csv文件:

保存的数据:

需要注意的:

csv读取中文乱码,要加入“GBK”invoke方法相当于第一个参数(对象)来调用method方法,第二个参数是set方法的值,类型要和setter方法类型一致,否则会报类型不匹配错误
java导出csv文件,java读取csv文件