CSV文件的导入

CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串

这里使用CsvReader专门用来读取逗号分割的文件导如对应包
 <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.6</version>
 </dependency>

实战代码

Controller层  
@PostMapping("/periodicalImport")
public ResultObject periodicalImport(@RequestParam("file") MultipartFile file, @RequestParam String id, 	@RequestParam String fileName) throws IOException {
    File file1 = new File(path + File.separator + fileName);
         if(file.getOriginalFilename().endsWith(".csv")){ //先校验文件格式 是否符合,还可以在配置文件中配置文件大小等限制
            ResultObject resultObject = englishJournalService.readPeriodicalCsvBiz(file.getInputStream(), id);
            file.transferTo(file1);
            return resultObject;
        }

}
配置文件文件限制
spring:
servlet:
multipart:
# 默认支持文件上传
enabled: true
# 最大支持文件大小
max-file-size: 180MB
# 最大支持请求大小
max-request-size: 200MB

实现层   
@Override
public ResultObject readPeriodicalCsvBiz(InputStream inputStream, String id) {
    try {
        CsvReader reader = new CsvReader(inputStream, ',', Charset.forName("UTF-8"));//使用reader流读取,逗号分割,每一列数据,并设置编码格式
        List<EnglishJournal> list = new ArrayList<>();
        while (reader.readRecord()) {
            String[] values = reader.getValues();// 按行读取,并把每一行的数据添加到list集合
			//对于表头的校验,下表从0开始,我这里因为表头是在第二行
            if(reader.getCurrentRecord()==1){
                String[] headList = {"Journal name","ISSN", "eISSN", "Category", "Total Citations",
                        "2020 JIF", "JIF Quartile", "2020 JCI","% of OA Gold","5 Year JIF","JIF Without Self Cites","Immediacy Index","Eigenfactor","Normalized Eigenfactor",
                        "Article Influence Score","JIF Percentile","Citable Items","% of Articles in Citable items","Cited Half-Life","Citing Half-Life","Total Articles"};
                for (int i = 0; i < headList.length; i++) {
                    if (!values[i].equals(headList[i])) {
                        throw  new Exception( "上传模板与系统模板不匹配,请使用平台模板上传数据");
                    }
                }
            }
            //读取数据,一行一行的读
            if(reader.getCurrentRecord()>=2&&reader.getValues().length==22){
                if (Arrays.asList(values).contains("n/a")||Arrays.asList(values).contains("N/A")){
                    continue;
                }
                EnglishJournal one = this.getOne(new LambdaQueryWrapper<EnglishJournal>().eq(EnglishJournal::getIssn, values[1]));
                EnglishJournal englishJournal = new EnglishJournal();
                if(one!=null){
                    englishJournal.setId(one.getId());
                }
                englishJournal.setGroupId(id);
                englishJournal.setJournalName(values[0]);
                englishJournal.setIssn(values[1]);
                englishJournal.setEissn(values[2]);
                englishJournal.setCategory(values[3]);
                englishJournal.setTotalCitations(converToBidecmal(values[4]));
                englishJournal.setJournalImpactFactor(converToBidecmal(values[5]));
                englishJournal.setJifQuartile(values[6]);
                englishJournal.setJci(converToBidecmal(values[7]));
                englishJournal.setOaGold(values[8]);
                englishJournal.setFiveYearJif(converToBidecmal(values[9]));
                englishJournal.setJifWithoutSelfCites(converToBidecmal(values[10]));
                englishJournal.setImmediacyIndex(converToBidecmal(values[11]));
                englishJournal.setEigenfactor(converToBidecmal(values[12]));
                englishJournal.setNormalizedEigenfactor(converToBidecmal(values[13]));
                englishJournal.setArticleInfluenceScore(converToBidecmal(values[14]));
                englishJournal.setJifPercentile(converToBidecmal(values[15]));
                englishJournal.setCitableItems(converToBidecmal(values[16]));
                englishJournal.setArticlesInCitableItems(values[17]);
                englishJournal.setCitedHalfLife(converToBidecmal(values[18]));
                englishJournal.setCitingHalfLife(converToBidecmal(values[19]));
                englishJournal.setTotalArticles(converToBidecmal(values[20]));
                list.add(englishJournal);
            }
        }
        this.saveOrUpdateBatch(list);
        reader.close();
        return ResultHand.success();
    } catch (Exception e) {
        e.printStackTrace();
        return ResultHand.error(e.getMessage());
    }
}

版权声明:本文为Chen_1999原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。