java文件上传

excel文件上传的两种方式

1.使用ExcelsUtils上传文件
2.把文件转换成流上传(支持多sheet)

代码实现
第一种方式
ExcelsUtils.ReadMultipartFile()可以直接读取文件 把文件转为byte数组 然后把字节数组转为json或者map,
第二种方式 把文件直接转为流(InputStream ins = new ByteArrayInputStream(file.getBytes())) 引入 new HSSFWorkbook(流)处理多sheet的情况

private List<Entity> readAndSetImport(MultipartFile file) {// 获得文件流InputStream ins = null;Workbook workbook = null;try {ins = new ByteArrayInputStream(file.getBytes());} catch (IOException e1) {log.error("读取流出错:{}", e1.getMessage());return null;}try {// 2007版本的excel,用.xlsx结尾workbook = new XSSFWorkbook(ins);} catch (Exception ex) {try {ins.reset();// 2003版本的excel,用.xlsworkbook = new HSSFWorkbook(ins);} catch (IOException e) {log.error("解析excel出错:{}", e.getMessage());return null;}}List<Entity> entitys= new ArrayList<>();try {// 获得第一个工作页Sheet sheet = workbook.getSheetAt(0);// 获得所有的字段Field[] fields = Entity.class.getDeclaredFields();Field field;List<String> fileList = new ArrayList<>(); // 文件里的中文字段名对应的对象字段名集合// 记录有多少行空的数据int count = 1;// 记录数据是从第几列开始记录的int begin = 0;for (int a = 0; a <= sheet.getLastRowNum(); a++) {Row row = sheet.getRow(a);if (row == null) {count++;continue;}boolean flag1 = false; // 标记该行有无数据for (Cell cell : row) {if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) {flag1 = true;break;}}if (flag1 == false) {count++;continue;}if (a < count){continue;}// 获得第一行不为空的数据为字段名if (a == count) {for (int b = 0; b < row.getLastCellNum(); b++) {Cell cell = row.getCell(b);if (fileList.isEmpty() && (cell == null || cell.getCellType() == Cell.CELL_TYPE_BLANK)) {begin++;} else {for (int i = 0; i < fields.length; i++) {field = Entity.class.getDeclaredField(fields[i].getName());ValidationField annotation = field.getAnnotation(ValidationField.class);if (annotation != null) {String value = annotation.value();String excelField = cell.toString();if (excelField.equals(value)) {fileList.add(fields[i].getName());break;}}}}}} else  {Entity entity = new Entity();entity.setNumber(a + 1 + ""); // 设置行号for (int i = 0; i < fileList.size(); i++) {Cell cell = row.getCell(begin + i);if (cell == null || cell.getCellType() == Cell.CELL_TYPE_BLANK) {continue;}field = Entity .class.getDeclaredField(fileList.get(i));field.setAccessible(true);// 读取excel表格设置对象字段值setFieldByExcel(entity, field, cell);}entitys.add(entity);}}} catch (Exception e) {log.error("解析excel 出错:{}",e.getMessage()); }return entitys;}

对应实体类 (顺序不要随意更改)
@Data
public class Entity{

@ValidationField("行号")
private String number;@ValidationField("姓名(*必填)")
private String userName;@ValidationField("性别(*必填)")
private String gender;..................................................................................private String errorDetails = "";
private List<String> errorFields = new ArrayList<>();
}
/*** 设置对象字段值(读取excel表)** @param vo*            对象* @param field*            字段* @param cell*            单元格*/private void setFieldByExcel(Entity entity, Field field, Cell cell) throws Exception {if (cell != null) {cell.setCellType(CellType.STRING);}if (field.getType() == String.class) {field.set(entity, cell.getStringCellValue());}}

java中excel文件上传相关推荐

  1. java语言 文件上传,java中实现文件上传的方法

    java中实现文件上传的方法 发布时间:2020-06-19 10:29:11 来源:亿速云 阅读:86 作者:Leah 这篇文章给大家分享的是java中实现文件上传的方法,相信大部分人都还没学会这个 ...

  2. java实现excel文件上传_java相关:SpringMVC下实现Excel文件上传下载

    java相关:SpringMVC下实现Excel文件上传下载 发布于 2020-6-21| 复制链接 摘记: 在实际应用中,经常会遇到上传Excel或者下载Excel的情况,比如导入数据.下载统计数据 ...

  3. java实现excel文件上传并解析内容保存到数据库中

    基于struts框架的web项目中excel文件的上传导入到数据库中的java代码 原理:将要上传的文件已流的形式传到服务器,服务器中接收到文件数据流并生成文件到服务器指定位置,java解析服务器生成 ...

  4. Java中的文件上传2(Commons FileUpload:commons-fileupload.jar)

    相比上一篇使用Servlet原始去实现的文件上传(http://www.cnblogs.com/EasonJim/p/6554669.html),使用组件去实现相对来说功能更多,省去了很多需要配置和处 ...

  5. java中ftp文件上传和中文乱码解决

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 前几天 有个需求就是上传文件的时候,本地存一份,其他服务器也保存一份,于是就研究了一下,功能只实现了 ...

  6. java实现Excel文件上传下载(模板)-hutool

    引入依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</arti ...

  7. java实现MinIO文件上传,并将视频文件截图,将视频封面及视频通过MinIo上传到服务器中

    java实现MinIO文件上传,并将视频文件截图,将视频封面及视频通过MinIo上传到服务器中 配置完毕,接下来开始代码编写. 说明 总过程分为两步. 1.配置MinIO的环境. 2.代码编写. 下面 ...

  8. Springboot+thymeleaf实现excel文件上传+后台数据搜索

    废话不多说,直接上代码 先说excel文件上传 用的是poi框架 先贴maven配置 <!-- poi导入excel文件--><dependency><groupId&g ...

  9. SSM项目的excel文件上传并添加到数据库

    SSM项目的excel文件上传并添加到数据库(新手,不足之处请多多指教) 基于学校的课设,要用到excel文件的上传和数据库导入,在网上找了好多demo,最后找到一篇使用poi的,经过修改后,可以正常 ...

最新文章

  1. Android socket 编程 实现消息推送(二)
  2. VS2012下安装配置OpenCV2.4.9的方法
  3. WebDriver高级应用实例(7)
  4. 1066. 图像过滤(15)
  5. sqlserver存储过程加锁后怎么解锁_【缺陷周话】第59期:重复加锁
  6. imagick用法!
  7. Linux进制查看工具:od、hexdump、xxd
  8. System verilog利用class类打印信息
  9. Java Web学习总结(5)——HttpServletResponse对象详解
  10. 设计模式之建造者(builder)模式
  11. workman 心跳
  12. 从盆景与景观看中西文化差异
  13. 串口程序设计——struct termios结构体
  14. Ubuntu修改键盘布局
  15. 相似度融合网络:用于聚合不同的基因数据类型:Similarity network fusion for aggregating data types on a genomic scale
  16. 神州笔记本电脑开机出现CMOS message【已解决】
  17. 【PM】软件项目管理流程和方法
  18. 情人节 玫瑰花表白源码
  19. 世界第一台计算机是多少位,世界上第一台计算机的字长是多少位?
  20. Virgo与Maven整合开发环境搭建(三)

热门文章

  1. Python的字符串操作
  2. 计算机无法关闭开机密码,电脑怎么关闭开机密码 电脑开机取消登录密码的两种方法...
  3. CentOS7开机或断网后无法自动连接网络
  4. ubuntu18.04编译GB28181Server
  5. MatchVs与CocosCreater
  6. Matchvs系列教程之利用微信web开发者工具开发联网游戏
  7. Thread、ThreadLocal、ThreadLocalMap是什么?看这一篇
  8. 技术丨压测工具wrk和Artillery的比较
  9. 一台电脑!利用Python当副业!实现月入过万
  10. Loadrunner pacing与thinktime