Java项目中遇到的文件导入功能简单记录一下

  • 文件导入
    • 准备工作:
    • 下载模版代码实例:
    • 文件下载代码实例:
    • 导入代码实例:

文件导入

由于项目中常常用到批量导入数据,用到了excel导入,方便自己所以记录一下大概流程。

准备工作:

准备一个模版,用于数据校验和导入使用。

例如:xxxx.xls 或者xxxx.xlsx

下载模版代码实例:

fileName:文件名称
path:模版路径地址

public R mouldExport(HttpServletResponse response) {String fileName = "xxxx.xls";String path = "template/xxxx.xls";DownloadFile.exportFile(fileName, path, response);return R.ok();
}

文件下载代码实例:

import io.card.common.exception.RRException;
import org.springframework.core.io.ClassPathResource;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
public class DownloadFile {/*** 下载文件**/public static void exportFile(String fileName,String path,HttpServletResponse response) {ClassPathResource classPathResource = new ClassPathResource(path);byte[] buff = new byte[1024];BufferedInputStream bis = null;OutputStream os = null;try {//获取文件流InputStream stream = classPathResource.getInputStream();response.setHeader("content-type", "application/octet-stream");response.setContentType("application/json; charset=utf-8");String name = java.net.URLEncoder.encode(fileName, "UTF-8");response.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLDecoder.decode(name, "ISO-8859-1") );os = response.getOutputStream();bis = new BufferedInputStream(stream);int i = bis.read(buff);while (i != -1) {os.write(buff, 0, buff.length);os.flush();i = bis.read(buff);}}catch (UnsupportedEncodingException e2) {e2.printStackTrace();} catch (FileNotFoundException e1) {throw new RRException("系统找不到指定的文件");}catch (IOException e) {e.printStackTrace();} finally {if (bis != null) {try {bis.close();} catch (IOException e) {e.printStackTrace();}}}}
}

导入代码实例:

ReadExcel.readExcel(file, 3): 我的模版中是从第三行后开始读写判断的,前面三行写了文档注意事项

public R uploadFile(@ApiIgnore @LoginUser SysUserEntity user,@RequestParam MultipartFile file) {Map<Long, Map<Integer, String>> map = ReadExcel.readExcel(file, 3);if (null == map) {return R.error("上传失败");}sysUserService.sysUserImport(map, user);return R.ok();
}

具体导入过程中的读写判断实例:

public void sysUserImport(Map<Long, Map<Integer, String>> map, SysUserEntity user) {Long i = 4l; // **之前模版默认前三行是注释,所以从第四行开始**SysUserEntity sysUserEntity = new SysUserEntity();while (true) {if (map.get(i) == null || map.get(i).isEmpty()) { //判断文档是不是空break;}Map<Integer, String> paramMap = map.get(i);//姓名if (StringUtil.isNullOrEmpty(paramMap.get(0))) {throw new RRException("第" + i + "行,姓名不能为空");}sysUserEntity.setUsername(paramMap.get(0).trim());//手机号if (StringUtil.isNullOrEmpty(paramMap.get(1))) {throw new RRException("第" + i + "行,手机号不能为空");}if (paramMap.get(1).trim().length() != 11) {throw new RRException("第" + i + "行,手机号不正确");}//判断手机号是否存在int cnt = this.selectCount(new EntityWrapper<SysUserEntity>().eq(LambdaHelper.asVOFieldUL(SysUserEntity::getMobile), paramMap.get(1).trim()));if (cnt != 0) {throw new RRException("第" + i + "行,手机号已存在");}sysUserEntity.setMobile(paramMap.get(1).trim());//部门if (StringUtil.isNullOrEmpty(paramMap.get(2))) {TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();throw new RRException("第" + i + "行,部门不能为空");}String[] deptAllList = paramMap.get(2).split(",");String[] isLeaderList = paramMap.get(4).split(",");if (!StringUtil.isNullOrEmpty(paramMap.get(4)) && isLeaderList.length != deptAllList.length) {throw new RRException("第" + i + "行,部门和是否部门主管必须对应");}//性别if (StringUtil.isNullOrEmpty(paramMap.get(3))) {throw new RRException("第" + i + "行,性别不能为空");}if (paramMap.get(3).trim().equals("男")) {sysUserEntity.setSex(1);} else if (paramMap.get(3).trim().equals("女")) {sysUserEntity.setSex(0);} else {throw new RRException("第" + i + "行,性别不正确");}//是否有车if (StringUtil.isNullOrEmpty(paramMap.get(5))) {throw new RRException("第" + i + "行,是否有车字段不能为空");}if (paramMap.get(5).trim().equals("是")) {sysUserEntity.setCarflg(1);} else if (paramMap.get(5).trim().equals("否")) {sysUserEntity.setCarflg(0);} else {throw new RRException("第" + i + "行,是否有车字段不正确");}//车牌号if (StringUtil.isNullOrEmpty(paramMap.get(6)) && paramMap.get(5).trim().equals("是")) {throw new RRException("第" + i + "行,车牌号不能为空");}if (paramMap.get(6).trim().length() != 7 && paramMap.get(5).trim().equals("是")) {throw new RRException("第" + i + "行,车牌号格式不正确");}//判断车牌号是否存在int car = this.selectCount(new EntityWrapper<SysUserEntity>().eq(LambdaHelper.asVOFieldUL(SysUserEntity::getCarnumber), paramMap.get(6).trim()));if (car != 0) {throw new RRException("第" + i + "行,车牌号已存在");}sysUserEntity.setCarnumber(paramMap.get(6).trim());//工卡号if (!StringUtil.isNullOrEmpty(paramMap.get(7))) {SysUserEntity userCard = new SysUserEntity();userCard.setCompanyId(user.getCompanyId());userCard.setCard(paramMap.get(7).trim());//校验工卡号是否存在且未绑定boolean bool = this.checkCardNumber(userCard);if (!bool) {throw new RRException("第" + i + "行,工卡号不存在或已绑定");}sysUserEntity.setCard(paramMap.get(7).trim());}//身份证if (!StringUtil.isNullOrEmpty(paramMap.get(8))) {if (paramMap.get(8).trim().length() != 18) {throw new RRException("第" + i + "行,身份证格式不正确");}sysUserEntity.setCertificate(paramMap.get(8).trim());}//身高if (!StringUtil.isNullOrEmpty(paramMap.get(9))) {sysUserEntity.setStature(paramMap.get(9).trim());}//体重if (!StringUtil.isNullOrEmpty(paramMap.get(10))) {sysUserEntity.setWeight(paramMap.get(10).trim());}//血型if (!StringUtil.isNullOrEmpty(paramMap.get(11))) {String bloodType=paramMap.get(11).trim();if (!bloodType.equals("A型")&& !bloodType.equals("B型")&& !bloodType.equals("AB型")&& !bloodType.equals("O型")&& !bloodType.equals("稀有血型")) {throw new RRException("第" + i + "行,血型格式不正确");}sysUserEntity.setBloodType(bloodType);}//疾病史if (!StringUtil.isNullOrEmpty(paramMap.get(12))) {String disease=paramMap.get(12).trim();if (!disease.equals("有") && !disease.equals("无")) {throw new RRException("第" + i + "行,疾病史格式不正确");}sysUserEntity.setDisease(disease);}//sha256加密String salt = RandomStringUtils.randomAlphanumeric(20);sysUserEntity.setPassword(new Sha256Hash(sysUserEntity.getMobile(), salt).toHex());sysUserEntity.setSalt(salt);sysUserEntity.setStatus(1);//正常状态sysUserEntity.setCompanyId(user.getCompanyId());this.insert(sysUserEntity);//角色if (!StringUtil.isNullOrEmpty(paramMap.get(13))) {String[] roleList = paramMap.get(13).trim().split(",");for (String roleName : roleList) {SysRoleEntity sysRoleEntity = sysRoleService.selectOne(new EntityWrapper<SysRoleEntity>().eq(LambdaHelper.asVOFieldUL(SysRoleEntity::getRoleName), roleName).eq(LambdaHelper.asVOFieldUL(SysRoleEntity::getCompanyId), user.getCompanyId()));if (null == sysRoleEntity) {throw new RRException("第" + i + "行,角色名称不存在");} else {SysUserRoleEntity sysUserRoleEntity = new SysUserRoleEntity();sysUserRoleEntity.setRoleId(sysRoleEntity.getRoleId());sysUserRoleEntity.setUserId(sysUserEntity.getUserId());sysUserRoleService.insert(sysUserRoleEntity);}}}//部门,没有就新增for (int deptAlli = 0; deptAlli < deptAllList.length; deptAlli++) {String[] dept = deptAllList[deptAlli].split("-");Integer deptParentId = 0;for (int depti = 0; depti < dept.length; depti++) {SysDeptEntity sysDeptEntity = sysDeptService.selectOne(new EntityWrapper<SysDeptEntity>().eq(LambdaHelper.asVOFieldUL(SysDeptEntity::getName), dept[depti]).eq(LambdaHelper.asVOFieldUL(SysDeptEntity::getCompanyId), user.getCompanyId()));if (sysDeptEntity == null) {sysDeptEntity = new SysDeptEntity();sysDeptEntity.setCompanyId(user.getCompanyId());sysDeptEntity.setName(dept[depti]);sysDeptEntity.setParentId(deptParentId);sysDeptEntity.setCreateUserId(user.getUserId().intValue());sysDeptService.insert(sysDeptEntity);sysDeptEntity.setSort(sysDeptEntity.getId());sysDeptService.updateById(sysDeptEntity);}deptParentId = sysDeptEntity.getId();if (depti == dept.length - 1) {SysUserDeptEntity sysUserDeptEntity = new SysUserDeptEntity();sysUserDeptEntity.setDeptId(sysDeptEntity.getId());sysUserDeptEntity.setUserId(sysUserEntity.getUserId().intValue());if (StringUtil.isNullOrEmpty(paramMap.get(4))) {sysUserDeptEntity.setIsLeader(0);} else {if (isLeaderList[deptAlli].equals("是") && depti == (dept.length - 1)) {sysUserDeptEntity.setIsLeader(1);} else {sysUserDeptEntity.setIsLeader(0);}}sysUserDeptService.insert(sysUserDeptEntity);}}}i++;}}

java实现excel数据导入相关推荐

  1. 用java把excel数据导入oracle日期转换,Java代码兑现excel数据导入到Oracle

    Java代码实现excel数据导入到Oracle 1.首先需要两个jar包jxl.jar,ojdbc.jar(注意版本,版本不合适会报版本错误) 2.代码: import java.io.File; ...

  2. 如何用Java将excel数据导入数据库

    近写了点关于将excel导入数据库的代码,当然也可以看做是对前面所介绍的小项目进行补充所做的准备.我一般都是先完成功能,然后将其封装成块,再添加到项目中,个人癖好不值得借鉴.项目中关于解析excel数 ...

  3. 用java将excel数据导入txt

    2019独角兽企业重金招聘Python工程师标准>>> package com.alibaba.test; import java.io.BufferedWriter; import ...

  4. java自定义注解实现excel数据导入导出,设置单元格数据验证与生成省市区多列联动效果

    本文通过自定义注解实现excel数据导入导出.以及设置excel文件中列数据验证,即用户在excel文件中输入数据时就可以对数据格式验证是否符合,节省了程序中过多的数据验证操作,注解还额外提供了一系列 ...

  5. 【转帖】Java实现Excel批量导入数据

    这篇文章主要为大家详细介绍了Java实现Excel批量导入数据,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 Excel的批量导入是很常见的功能,这里采用Jxl实现,数 ...

  6. java txt数据导入excel,java导入excle文件《如何用java 将txt数据导入excel》

    如何用java 将txt数据导入excel 代码如下: import java.io.*; import jxl.*; import jxl.write.*; public class CreateX ...

  7. Java带图片的excel数据导入

    带图片的EXCEL数据导入 这里使用的是POI,所以这里使用的很杂,不过方便对它们的了解.模板下载与图片导出到excel都不一样. 下面会把对应连接贴上. 带入依赖:不要使用3.17的版本,直接上代码 ...

  8. JAVA实现数据库数据导入/导出到Excel(POI)

    原文地址为: JAVA实现数据库数据导入/导出到Excel(POI) 准备工作: 1.导入POI包:POI下载地址http://mirrors.tuna.tsinghua.edu.cn/apache/ ...

  9. 将Excel数据导入mysql数据库的几种方法

    将Excel数据导入mysql数据库的几种方法 "我的面试感悟"有奖征文大赛结果揭晓! 前几天需要将Excel表格中的数据导入到mysql数据库中,在网上查了半天,研究了半天,总结 ...

最新文章

  1. vim 双剑合璧,天下无敌(笔记)
  2. 极光商智®服务器2007今日正式发布
  3. 10.2-linux文件与目录管理
  4. [当人工智能遇上安全] 7.基于机器学习的安全数据集总结
  5. 017 包扫描器和标记注解
  6. 转录组差异表达分析工具Ballgown
  7. rk3288 android编译环境搭建,RK3288系统编译及环境搭建
  8. 设计模式笔记八:过滤器模式
  9. emoji表情mysql报错_让MySQL支持Emoji表情 mysql 5.6
  10. CMOS Image Sensor的接口硬件设计(DVP/MIPI CSI)
  11. 安卓Camera屏幕竖屏适配
  12. 重磅!「自然语言处理(NLP)」全球学术界”巨佬“信息大盘点(一)!
  13. 安装cad提示command_win7系统安装CAD软件失败总是提示“错误1327”怎么解决
  14. Gmail 实验室产品经理 Todd Jackson 访谈录
  15. 软件是一个工程,是一个商业活动,是一个艺术,更是一门经营管理。
  16. vue单页应用首屏加载速度慢如何解决
  17. sql server数据库错误数据恢复(数据库连接失效,无法附加查询)
  18. LRU算法模拟器(基于Java和VUE前端实现)
  19. pandas 处理 excel 文件 之 Series DataFrame 篇
  20. 怎么让steam允许访问自己的计算机,科技教程:电脑steam软件如何解决好友网络无法访问...

热门文章

  1. ie浏览器float兼容性
  2. Docker-CE 监控
  3. SpringCloud学习记录 | 第十五篇:SpringCloud Alibaba Nacos配置中心-单机版
  4. android txt小说阅读器的实现
  5. pandas_datareader.data 获取雅虎财经股票数据并以csv格式存放
  6. 《旅行,孤独,敬业》
  7. mathtype7 正版官网 宣布免费使用
  8. 3D眩晕症及解决方法
  9. 解决方案:Linux Ubuntu16.04 下无法挂载大容量U盘,优盘打不开
  10. PS 小技巧让你好用到哭