/*
* 从MultipartFile文件流中获取csv文件,将其初始化为实体类集合
*
* @Author: wuyc
* @Date: 2022/3/15 20:19
* @Param [file, clazz] [文件对象,实体类类型]
* @return java.util.List<T>c
*/
public static <T> List<T> readCsv(MultipartFile file, Class<T> clazz) throws Exception {
InputStreamReader in = new InputStreamReader(file.getInputStream(), "GBK");
HeaderColumnNameMappingStrategy<T> mappingStrategy = new HeaderColumnNameMappingStrategy<>();
mappingStrategy.setType(clazz);
CsvToBean<T> csvToBean = new CsvToBeanBuilder<T>(in)
.withSeparator(',')
.withQuoteChar('\'')
//.withSkipLines(1)
.withMappingStrategy(mappingStrategy)
.build();
// 如果导出来的数据不符合要求,直接终止处理
// 注意此处采用了@Valid来验证,过CsvToBean对象的parse()方法将CSV文件解析成实体类对象列表,
// 并使用@Valid注解对结果进行验证。
// 在这里,@Valid注解的作用是告诉程序验证该tList列表中的每个元素是否符合对应实体类的校验规则。
// 如果某个实体类对象不符合校验规则,则会抛出验证异常。
@Valid List<T>tList=csvToBean.parse();
return tList;
}
/*
* 根据文件路径和实体类类型读取CSV文件并转换为实体类列表
*
* Author: wuyc
* Date: 2022/3/16 11:18
* 返回一个唯一的文件名
*/
public static synchronized String getUniqueKey(){
Random random = new Random();
/*生成一个三位随机数*/
Integer num=random.nextInt(900)+100;
return String.valueOf(num);
}