public Map<String,Object> uploadCsvFile(@RequestParam("file") MultipartFile file) throws IOException, ParseException {
Map<String, Object> resultMap = new HashMap<>();
String originalFilename = file.getOriginalFilename();
String suffixName = originalFilename.substring(originalFilename.lastIndexOf("."));
if (!".csv".equals(suffixName)) {
resultMap.put("flag", 0);
resultMap.put("msg","请上传csv文件!");
return resultMap;
}
String path = ClassUtils.getDefaultClassLoader().getResource("").getPath();
File file1 = new File(path,originalFilename);
if(!file1.getParentFile().exists()){
file1.getParentFile().mkdirs();
}
file.transferTo(file1);
File localFile = new File(file1.toString());
if(!localFile.exists()){
//先得到文件的上级目录,并创建上级目录,在创建文件
localFile.getParentFile().mkdir();
try {
//创建文件
localFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
FileInputStream fileInputStream = new FileInputStream(localFile);
List<SdttClient> list = new ArrayList<>();
//实体的集合,把csv中的列装在list里。
//编码格式要是用utf8
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
InputStreamReader is = new InputStreamReader(fileInputStream, "utf8");
BufferedReader reader = new BufferedReader(is);
reader.readLine(); //第一行信息,为标题信息,不用,如果需要,注释掉
String line = null;
while ((line = reader.readLine()) != null) {
//实体类
XXXX xxx = new XXXX();
//名称
//CSV格式文件为逗号分隔符文件,这里根据逗号切分
String item[] = line.split(",");
if (getValue(item, 0) != null) {
//getValue(item, 0) 就是文件中去掉标题行的第一列的数据
xxx.id("".equals(getValue(item,0))?null:Integer.parseInt(getValue(item, 0)))
.set......
}
list.add(sdtt);
}
resultMap = sdttClientService.uploadCsvFile(list);
return resultMap;
}
public static String getValue(String[] item, int index) {
if (item.length > index) {
String value = item[index];
return value;
}
return "";
}
csv文件数据导入数据库
最新推荐文章于 2025-04-08 11:23:52 发布