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版权协议,转载请附上原文出处链接和本声明。