SpringBoot实现多数据源的切换实践
777
2022-07-22
目录介紹参考代码测试用例
介紹
csv全称“Comma-Separated Values”,是一种逗号分隔值格式的文件,是一种用来存储数据的纯文本格式文件。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串。
我找了找目前百度上基本是没有这方面的快捷转换方式和工具包,能找到的基本都不能通用写死的,没办法只能自己写一份出来,主要用到的技术,反射,泛型,类型转换,构造者设计模式 ,以下代码给提供一个思路,技术差不多的话基本上看了下面的代码是能自己写出来的,如果是入门级别的java程序员就自行跳过本博客
参考代码
部分工具类的代码没有展示, 这里就粘贴主要核心原理,很简单,自己也是能编写出来的
package com.file.csv;
import com.obj.converter.Converter;
import com.reflect.ReflectUtil;
import com.string.PatternCommon;
import lombok.SneakyThrows;
import org.springframework.core.ParameterizedTypeReference;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* csv转对象
* @Author: huanmin
* @Date: 2022/6/18 15:59
* @Version: 1.0
* @Description: 文件作用详细描述....
*/
public class CSVToObj
private String separator ; //默认分隔符
private List
private List
private Map
public CSVToObj(List
//特殊符号的处理
this.separator = PatternCommon.division(separator);
this.objects=objects;
}
//列,映射,转换的时候会和映射的顺序保持一致 ,默认使用当前文件的分隔符作为切割
public CSVToObj
String[] split = fieldNames.split(separator);
Class extends CSVToObj> aClass = ReflectUtil.deSerializable(getClass(),0);
Field[] declaredFields = aClass.getDeclaredFields();
for (String s : split) {
for (Field declaredField : declaredFields) {
declaredField.setAccessible(true);
if(s.equals(declaredField.getName())){
fieldsTypes.put(declaredField.getName(), declaredField.getType().getTypeName());
}
}
}
return this;
}
@SneakyThrows
public CSVToObj
Class extends CSVToObj> aClass = ReflectUtil.deSerializable(getClass(),0);
for (String object : objects) {
String[] split = object.split(separator);
T o = (T)aClass.newInstance();
Field[] declaredFields = o.getClass().getDeclaredFields();
for (int i = 0; i < declaredFields.length; i++) {
Field declaredField = declaredFields[i];
declaredField.setAccessible(true);
if (fieldsTypes.containsKey(declaredField.getName())) {
declaredField.set(o, Converter.cast(split[i],fieldsTypes.get(declaredField.getName())));
}
}
list.add(o);
}
return this;
}
public List
return list;
}
}
测试用例
package com.file;
import com.entity.UserData;
import com.file.csv.CSVToObj;
import com.file.csv.ReadAndWriteFileCSV;
import com.path.ResourceFileUtil;
import org.junit.Test;
import java.io.File;
import java.util.List;
/**
* csv转对象测试
*
* @Author: huanmin
* @Date: 2022/6/18 16:44
* @Version: 1.0
* @Description: 文件作用详细描述....
*/
public class CSVToObjTest {
@Test
public void show1(){
File absoluteFileOrDirPathAndCreateNewFile = ResourceFileUtil.getAbsoluteFileOrDirPathAndCreateNewFile("/file/text.csv");
//读取头部对应字段
String head = ReadAndWriteFileCSV.readFirstLineOne(absoluteFileOrDirPathAndCreateNewFile);
//去掉头部和尾部的多余信息,只显示内容
List
//做映射,然后转换csv格式为实体对象
List
for (UserData userData : result) {
System.out.println(userData);
}
}
@Test
public void show2(){
File absoluteFileOrDirPathAndCreateNewFile = ResourceFileUtil.getAbsoluteFileOrDirPathAndCreateNewFile("/file/text.csv");
//手动指定文件头部
String head ="id|name|pass|age|sex|site";
//去掉头部和尾部的多余信息,只显示内容
List
List
for (UserData userData : result) {
System.out.println(userData);
}
}
//
}
以上就是Java实现CSV格式转对象的详细内容,更多关于Java CSV转对象的资料请关注我们其它相关文WEgrXijrq章!
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~