Java 读取超大excel文件

注意:此参考解决方案只是针对xlsx格式的excel文件!

Maven

xml 复制代码
<dependency>
    <groupId>com.monitorjbl</groupId>
    <artifactId>xlsx-streamer</artifactId>
    <version>2.2.0</version>
</dependency>

读取方式1

java 复制代码
private static void readBigExcel(String filePath) throws FileNotFoundException {
    FileInputStream in = new FileInputStream(filePath);
    StreamingReader reader = StreamingReader.builder()
            .rowCacheSize(100)    // number of rows to keep in memory (defaults to 10)
            .bufferSize(4096)     // buffer size to use when reading InputStream to file (defaults to 1024)
            .sheetIndex(0)        // index of sheet to use (defaults to 0)
            .read(in);            // InputStream or File for XLSX file (required)

    for (Row r : reader) {
        for (Cell c : r) {
            System.out.print(c.getStringCellValue() + "  ");
        }
        System.out.println();
    }
}

读取方式2

java 复制代码
public static Workbook getStreamWorkbook(String filePath) throws FileNotFoundException {
    FileInputStream in = new FileInputStream(filePath);
    Workbook wk = StreamingReader.builder()
            .rowCacheSize(100)  //缓存到内存中的行数,默认是10
            .bufferSize(4096)   //读取资源时,缓存到内存的字节大小,默认是1024
            .open(in);          //打开资源,必须,可以是InputStream或者是File,注意:只能打开XLSX格式的文件
    return wk;
}

获取到Workbook后,余下读取cell方法参考 java 读取excel ,因为超大文件,所以只能使用for each循环方式遍历excel。

参考

Java中使用POI读取大的Excel文件或者输入流时发生out of memory异常参考解决方案
How to load a large xlsx file with Apache POI?

相关推荐
萧瑟余晖1 小时前
JDK 26 新特性详解
java·开发语言
马优晨2 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区4 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大4 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai4 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
维天说4 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
এ慕ོ冬℘゜5 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
执明wa5 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio
一次旅行5 小时前
Python+大模型端到端自动化日报系统
开发语言·python·自动化
Zane19945 小时前
并发 vs 并行:别再傻傻分不清了,一文讲透 Java 并发编程的第一课
java·后端