java CSV文件登录数据(返回错误数据)

页面上传一个csv文件,check文件内容,如果不满足要求,则返回错误信息,反之则登录数据。(仅供参考)


1.导入依赖(opencsv.jar)
2.创建工具类

UserErrorInfo.java(存放错误信息)

 1 public class UserErrorInfo {
 2     /**
 3      * 行番号
 4      */
 5      private int rowIndex;
 6      
 7     /**
 8      * 用户ID
 9      */
10     private String userId;
11     
12     /**
13      * 用户名
14      */
15     private String userName;
16     
17     /**
18      * 错误信息
19      */
20     private List<String> errMsgs;
21     ...
22     getter() setter()...
23 }

CsvUesrRegisInfo.java(数据check)
validation check(可以自定义标签)

 1 public class CsvUesrRegisInfo{
 2     /**
 3      * 用户ID
 4      */
 5      @NotEmpty()
 6     private String userId;
 7     
 8     /**
 9      * 用户名
10      */
11      @NotEmpty()
12     private String userName;
13     ...
14     getter() setter()...
15 }

CsvUploadOutputDto.java

 1 public class CsvUploadOutputDto{
 2     /**
 3      * 用户信息
 4      */
 5     private List<?> dataList;
 6     
 7     /**
 8      * check结果
 9      */
10     private BindingResult bindingResult ;
11     
12     /**
13      * check结果
14      */
15     private List<UserErrorInfo> UserErrorInfoList;
16     ...
17     getter() setter()...
18 }

CsvUploadHelper.java
(核心处理)

 1 public class CsvUploadHelper{
 2     public <T> CsvUploadOutputDto uploadFile(MultipartFile uploadFile, Class<T> csvBeanClass, String bindingResultObjectName){
 3         CsvUploadOutputDto outputDto = new CsvUploadOutputDto();
 4         BeanPropertyBindingResult bindingResult = new BeanPropertyBindingResult(uploadFile, bindingResultObjectName);
 5         // CSV非空check()
 6         if (uploadFile.isEmpty()) {
 7             ...// throw new BusinessException(messages);
 8         }
 9         List<T> dataList = new ArrayList<>();
10         List<ObjectError> errorList = new ArrayList<>();
11         List<UserErrorInfo > UserErrorInfos = new ArrayList<>();
12         boolean overSizeFlag = false;
13         try {
14             //读取csv文件
15             CSVReader csvReader = new CSVReader(new InputStreamReader(uploadFile.getInputStream(),"MS932"));
16             List<String[]> csvLines = csvReader.readAll();
17             int lineNumber = 0;
18             // 最大行数
19             if (maxRecord < csvLines.size()) {
20                 overSizeFlag = true;
21             } else {
22                 for (String[] line : csvLines) {
23                     lineNumber = lineNumber + 1;
24                     Class<?> clazz = Class.forName(csvBeanClass.getName);
25                     T csvObject = (T) clazz.newInstance;
26                     Field fields = csvObject.getClass.getDeclaredFields();
27                     BeanPropertyBindingResult result= new BeanPropertyBindingResult(csvObject, csvBeanClass.getName());
28                     // check
29                     smartValidator.validate(csvObject, result);
30                     boolean hasErrorFlag = false;
31                     //
32                     if (result.hasErrors){
33                         hasErrorFlag = true;
34                         /**
35                           * errMsgList.add(message)
36                           * userErrorInfo.setErrMsgs(errMsgList);
37                           * userErrorInfos.add(userErrorInfo);
38                          */
39                     }
40                     if (hasErrorFlag ) {
41                         errorList.add(objectError)
42                     } else {
43                         // check通过
44                         dataList.add(csvObject);
45                     }
46                 }
47             }
48             csvReader.close();
49         }catch(...){
50             ...
51         }catch(...){
52             ...
53         }
54         outputDto.setUserErrorInfoList(userErrorInfos);
55         outputDto.setDataList(dataList);
56         for(objectError error : errorList){
57             bindingResult.addError(error);
58         }
59         outputDto.setBindingResult (bindingResult);
60         retrun outputDto;
61     }
62 }

 

3.调用工具类
controller

1 outputDto = csvUploadHelper.uploadFile(uploadFile,CsvUesrRegisInfo.class,result.getObjctName());
2 if (outputDto.getBindingResult().hasError()) {
3     //返回错误数据,返回页面
4 } else{
5     //登录数据
6 }

总结

写这个主要目的是记录,还有很多没在这个上面写出来,但总体就是基本的csv读取和Java反射原理。

posted on 2020-10-31 02:11  猫的树kireCat  阅读(43)  评论(0编辑  收藏  举报