本文共介绍两种方式,第一种是常规POI读取,第二种是大文件读取。

依赖包

 <poi.version>4.1.2</poi.version><!-- excel工具 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>${poi.version}</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>${poi.version}</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>${poi.version}</version></dependency><!-- 读取大量excel数据时使用 --><dependency><groupId>com.monitorjbl</groupId><artifactId>xlsx-streamer</artifactId><version>2.1.0</version></dependency>

第一种方式:

常规POI读取

package com.platform.modules.admin.controller;import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Date;public class ReadExcel {public static void main(String[] args) throws Exception {long t1 = new Date().getTime();excel();long t2 = new Date().getTime();System.out.println((t2-t1)/1000 + "秒");}public static void excel() throws Exception {File file = new File("C:\\Users\\Lenovo\\Desktop\\数据导入模板及填写格式 (2).xlsx");if (!file.exists()){throw new Exception("文件不存在!");}InputStream in = new FileInputStream(file);// 读取整个ExcelXSSFWorkbook sheets = new XSSFWorkbook(in);// 获取第一个表单SheetXSSFSheet sheetAt = sheets.getSheetAt(0);//默认第一行为标题行,i = 0XSSFRow titleRow = sheetAt.getRow(0);// 循环获取每一行数据for (int i = 1; i < sheetAt.getPhysicalNumberOfRows(); i++) {XSSFRow row = sheetAt.getRow(i);// 读取每一格内容StringBuilder sb = new StringBuilder();for (int index = 0; index < row.getPhysicalNumberOfCells(); index++) {XSSFCell titleCell = titleRow.getCell(index);XSSFCell cell = row.getCell(index);cell.setCellType(CellType.STRING);if (cell.getStringCellValue().equals("")) {continue;}sb.append(cell);}System.out.println(i + "\t" + sb);}}
}

第二种方式:

大文件excel读取

package com.platform.modules.admin.controller;import com.monitorjbl.xlsx.StreamingReader;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;import java.io.File;
import java.io.FileInputStream;
import java.util.*;public class ReadBigExcel {public static Map<String, List<String>> test(File file) throws Exception{FileInputStream in = new FileInputStream(file);Map<String,List<String>> mapData = new HashMap<String, List<String>>();Workbook wk = StreamingReader.builder().rowCacheSize(100)  //缓存到内存中的行数,默认是10.bufferSize(4096)  //读取资源时,缓存到内存的字节大小,默认是1024.open(in);  //打开资源,必须,可以是InputStream或者是File,注意:只能打开XLSX格式的文件int sheetNums = wk.getNumberOfSheets();for(int i = 0 ; i < sheetNums;i ++){List<String> sheetData = new ArrayList<String>();Sheet sheet = wk.getSheetAt(i);String sheetName = wk.getSheetName(i);//遍历所有的行int k = 0;for (Row row : sheet) {StringBuilder sb = new StringBuilder();//遍历所有的列for (Cell cell : row) {sb.append(cell.getStringCellValue());}System.out.println(k++ + "\t" + sb.toString());}}return mapData;}public static void main(String[] args) throws Exception {File file = new File("C:\\Users\\Lenovo\\Desktop\\数据导入模板及填写格式 (2).xlsx");long t1 = new Date().getTime();test(file);long t2 = new Date().getTime();System.out.println((t2-t1)/1000 + "秒");}
}

执行效率比对,横坐标为数据量,纵坐标为执行耗时秒

可以看出大文件读取POI的执行效率比常规POI好很多。

框起来的这一块是执行常规POI所耗资源,读取大文件POI对CPU和内存的占用也叫常规POI低很多,最重要的是不会引起内存溢出。

java 读取excel数据相关推荐

  1. Java读取Excel数据:基于Apache POI(一)

    Java读取Excel数据:基于Apache POI(一) Java本身不支持直接读取微软的Excel表格数据.第三方的Apache提供了一个库POI用以支持Java读写Excel表格数据. 首先需要 ...

  2. JAVA读取Excel数据

    JAVA读取Excel数据 下载 jxl.jar 导入jxl.jar 读取程序 写入Excel 写入txt 下载 jxl.jar 找到一个博主发的,下载好后去掉.zip后缀 jxl.jar下载 - 天 ...

  3. 项目实战 Java读取Excel数据

    项目实战 Java读取Excel数据 前言 实现步骤 导入POI依赖 示例Excel表结构 编写读取Excel工具类 实现思路 读取Excel数据工具类实现代码 取出从excel中获取的数据,并插入到 ...

  4. java 读取Excel数据(POI)(一个sheet或者多个sheet)

    1.添加依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml< ...

  5. java读取excel数据_Java读取Excel内容(转)

    借助于apathe的poi.jar,由于上传文件不支持.jar所以请下载后将文件改为.jar,在应用程序中添加poi.jar包,并将需要读取的excel文件放入根目录即可 本例使用java来读取exc ...

  6. java读取excel数据的方法是_java怎么读取excel文件里的数据

    展开全部 下面是一个简单的读取例子,如果报"java.io.IOException: Invalid header signature; read 4503608217567241, exp ...

  7. JAVA读取excel数据(插入oracle数据库)

    本实例做的是读取execl(只能读取.xls的execl,即只能读取03版的),如果是.xlsx类型的话 手工转化一下即可,应用的jar包是apache的poi系类的jar包和ojdbc14.jar的 ...

  8. 在JAVA读取Excel数据的日期格式

    在ExcelReader类中.getStringCellValue()方法里: public static String getStringCellValue(Cell cell) { if(cell ...

  9. java读取excel数据保存到数据库中_java读取excel的内容(可保存到数据库中)

    //** poi jar包 // public classReadExcel { @SuppressWarnings("static-access")private staticS ...

最新文章

  1. 我把SpringBoot项目从18.18M瘦身到0.18M,部署起来真省事!
  2. Android面试题目之三: 字符串转整形
  3. springboot 自动装配_Spring Boot 自动装配流程
  4. Oracle存在修改,不存在插入记录
  5. 一步步使用SAP C4C Cloud Application Studio创建一个BO和对应的屏幕
  6. C#中LINQ与数据管道
  7. 怎么使用starwind部署iscsi_2019 年总结 - 多环境多版本的部署
  8. Python操作Mysql实例代码教程在线版(查询手册)_python
  9. CANopen | 对象字典OD 03 - 启动CANopen节点的服务数据对象SDO
  10. python requests form data_Python爬虫:Request Payload和Form Data的简单区别说明
  11. 生产过程代码分析(二)--估计
  12. KL距离-Kullback-Leibler Divergence
  13. 使用GIT来管理代码的心得
  14. JAVA开发常用类(六)
  15. 一个示例让你明白界面与数据分离
  16. java私塾架构二,小弟我在Java私塾学习期间的学习源码
  17. BeanShell用法汇总
  18. 2.5D 组态案例合集 | 智慧园区、数据中心、SMT 生产线、汽车制造
  19. 关于操作系统镜像超过4G的解决办法
  20. KEIL 不使用microlib 报错__stdin __stdout重复定义

热门文章

  1. 别用微信文件传输助手了,这6款在线工具真香
  2. 如何一个办公室里共享一个打印机,局域网设置打印机共享步骤。超简单,不懂技术都可操作
  3. 电脑桌面无图标,任务栏也不见了
  4. SPDY:一种更快速web的实验协议(转)
  5. android logo 大小
  6. DeskMini310 黑苹果(hackintosh)
  7. AWS创建用户、角色、策略
  8. ADAU1860调试心得(13)DSP实现滤波器算法
  9. 如何用营销思维做好产品运营规划?
  10. 条形码、二维码、RFID优缺点,卫星定位,传感器分类及应用场景