欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java使用FastExcel高效讀取和寫入Excel

 更新時(shí)間:2025年11月05日 10:24:53   作者:智_永無止境  
FastExcel 是一個(gè) Java 庫,旨在高效地讀取和寫入 Excel 文件,它最初是 EasyExcel 的分叉版本,旨在提供增強(qiáng)的性能、持續(xù)維護(hù)和新功能,同時(shí)保持與原始 EasyExcel API 的兼容性,本文給大家介紹了Java如何使用FastExcel高效讀取和寫入Excel,需要的朋友可以參考下

01 引言

FastExcel大家可能不熟悉,但是EasyExcel應(yīng)該都使用過吧?

FastExcelEasyExcel版本的延續(xù),自從阿里巴巴官方停止維護(hù)EasyExcel,EasyExcel的作者繼續(xù)維護(hù)起來,并持續(xù)改進(jìn)優(yōu)化,并更名為FastExcel。

02 簡介

FastExcel 是一個(gè) Java 庫,旨在高效地讀取和寫入 Excel 文件。它最初是 EasyExcel 的分叉版本,旨在提供增強(qiáng)的性能、持續(xù)維護(hù)和新功能,同時(shí)保持與原始 EasyExcel API 的兼容性。這使其成為在 Java 應(yīng)用程序中處理 Excel 數(shù)據(jù)的強(qiáng)大的用戶友好的工具。

FastExcel 通過優(yōu)化內(nèi)存使用來優(yōu)先考慮高性能,特別是在處理大型數(shù)據(jù)集時(shí)。它通過 SAX 解析機(jī)制實(shí)現(xiàn)這一點(diǎn),以流式方式處理基于 XML 的 Excel 文件(XLSX),而無需一次性將整個(gè)文件加載到內(nèi)存中。

官網(wǎng)地址:https://readmex.com/fast-excel/fastexcel/page-151366ada-2ea3-4451-aa3d-98ac90ce4f6e

Github地址:https://github.com/fast-excel/fastexcel

主要特性:

  • 高性能讀寫:FastExcel 專注于性能優(yōu)化,能夠高效處理大規(guī)模的 Excel 數(shù)據(jù)。相比一些傳統(tǒng)的 Excel 處理庫,它能顯著降低內(nèi)存占用。
  • 簡單易用:該庫提供了簡潔直觀的 API,使得開發(fā)者可以輕松集成到項(xiàng)目中,無論是簡單的 Excel 操作還是復(fù)雜的數(shù)據(jù)處理都能快速上手。
  • 流式操作:FastExcel 支持流式讀取,將一次性加載大量數(shù)據(jù)的問題降到最低。這種設(shè)計(jì)方式在處理數(shù)十萬甚至上百萬行的數(shù)據(jù)時(shí)尤為重要。

03 功能概要

業(yè)務(wù)項(xiàng)目中,我們經(jīng)常需要讀寫Excel,如Excel的導(dǎo)入,導(dǎo)出。

3.1 Maven

<dependency>
    <groupId>cn.idev.excel</groupId>
    <artifactId>fastexcel</artifactId>
    <version>1.2.0</version> <!-- Or the latest version -->
</dependency>

3.2 模型類

用來接收Excel數(shù)據(jù)的實(shí)體

@Data
public class Book {

    private String bookName;
    private String author;
    private BigDecimal price;
    private Date saleDate;
}

3.3 讀取Excel文件

API

案例:

@Test
void test01() throws FileNotFoundException {
    File file = ResourceUtils.getFile("classpath:file/demo.xls");
    List<Book> bookList = new ArrayList<>();
    FastExcel.read(file, Book.class, new ReadListener<Book>() {
        @Override
        public void invoke(Book book, AnalysisContext analysisContext) {
            System.out.println("解析數(shù)據(jù):" + JSON.toJSONString(book));
            bookList.add(book);
        }

        @Override
        public void doAfterAllAnalysed(AnalysisContext analysisContext) {
            System.out.println("解析完所有數(shù)據(jù)....");
        }
    }).sheet().doRead();

    System.out.println("bookList:" + JSON.toJSONString(bookList));
}

執(zhí)行結(jié)果:

代碼解析:

read(File file, Class head, ReadListener readListener)

  • FastExcel擁有靜態(tài)方法read()
  • file:需要讀取的文件
  • head:需要將文件解析的對象,按照字段的順序和excel的澍勛解析,也可以通過@ExcelProperty指定索引位置
  • readListener:讀取每一條數(shù)據(jù)的監(jiān)聽器,處理數(shù)據(jù)也是這里處理的

FastExcel.read(...).sheet().doRead()

  • sheet():默認(rèn)第一個(gè)sheet,也可以傳遞參數(shù)指定
  • doRead():開始同步讀取數(shù)據(jù),也可以異步讀取數(shù)據(jù)doReadSync()

3.4 寫入Excel文件

寫入文件之前,我們需要定義模板類的名稱,需要使用到@ExcelProperty

@Data
public class Book {

    @ExcelProperty(value = "書名")
    private String bookName;
    @ExcelProperty(value = "作者")
    private String author;
    @ExcelProperty(value = "價(jià)格")
    @NumberFormat("#,###.00")
    private BigDecimal price;
    @ExcelProperty(value = "上架時(shí)間")
    @DateTimeFormat("yyyy-MM-dd")
    private Date saleDate;
}

API:

案例:

@Test
void test02() {
    List<Book> bookList = new ArrayList<>();
    for (int i = 0; i < 5; i++) {
        Book item = new Book();
        item.setBookName("Java" + i);
        item.setAuthor("張三" + i);
        item.setPrice(new BigDecimal("2002.35"));
        item.setSaleDate(new Date());
        bookList.add(item);
    }
    FastExcel.write("writeDemo.xls", Book.class).sheet().sheetName("test").doWrite(bookList);
}

執(zhí)行結(jié)果:

代碼解析:

write(String pathName, Class head)

  • FastExcel擁有靜態(tài)方法write()
  • pathName:文件要生成的位置
  • head:模板類,這個(gè)生成Excel的關(guān)鍵

FastExcel.write(...).sheet().sheetName("test").doWrite(bookList)

  • sheet():寫入sheet的位置,默認(rèn)第一個(gè)
  • sheetName("test"):自定義sheet的名稱
  • doWrite():要寫入的數(shù)據(jù)源

04 小結(jié)

FastExcel替我們省去了使用POI的繁瑣,使用起來只關(guān)系需要處理的數(shù)據(jù)即可,非常方便。EasyExcelFastExcel在使用上基本沒有什么區(qū)別,因?yàn)橥谕础?/p>

EasyExcel已經(jīng)停止維護(hù)了,你會去遷移到FastExcel上么?作者給出了幾個(gè)遷移優(yōu)勢:

以上就是Java使用FastExcel高效讀取和寫入Excel的詳細(xì)內(nèi)容,更多關(guān)于Java FastExcel讀取和寫入Excel的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Springboot處理CORS跨域請求的三種方法

    Springboot處理CORS跨域請求的三種方法

    這篇文章主要介紹了Springboot處理CORS跨域請求的三種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 詳解Spring mvc的web.xml配置說明

    詳解Spring mvc的web.xml配置說明

    本篇文章主要介紹了Spring mvc的web.xml配置說明,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • springboot序列化和反序列化器配置方法

    springboot序列化和反序列化器配置方法

    這篇文章主要介紹了springboot序列化和反序列化器配置方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • Java面試突擊為什么要用HTTPS及它的優(yōu)點(diǎn)

    Java面試突擊為什么要用HTTPS及它的優(yōu)點(diǎn)

    這篇文章主要介紹了Java面試突擊為什么要用HTTPS及它的優(yōu)點(diǎn),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • Spring Boot如何移除內(nèi)嵌Tomcat,使用非web方式啟動

    Spring Boot如何移除內(nèi)嵌Tomcat,使用非web方式啟動

    這篇文章主要介紹了Spring Boot如何移除內(nèi)嵌Tomcat,使用非web方式啟動,幫助大家更好的理解和學(xué)習(xí)使用spring boot框架,感興趣的朋友可以了解下
    2021-02-02
  • mybatis教程之resultmap_動力節(jié)點(diǎn)Java學(xué)院整理

    mybatis教程之resultmap_動力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了mybatis教程之resultmap,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • java中的可變參數(shù)使用方法

    java中的可變參數(shù)使用方法

    這篇文章主要介紹了java中的可變參數(shù)使用方法的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • mybatisPlus條件構(gòu)造器常用方法小結(jié)

    mybatisPlus條件構(gòu)造器常用方法小結(jié)

    這篇文章主要介紹了mybatisPlus條件構(gòu)造器常用方法,首先是.select和其他條件,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • 使用@Value注解從配置文件中讀取數(shù)組

    使用@Value注解從配置文件中讀取數(shù)組

    這篇文章主要介紹了使用@Value注解從配置文件中讀取數(shù)組的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • java中定義常量方法介紹

    java中定義常量方法介紹

    java中只有static和非static變量,這個(gè)屬于每個(gè)類的,如果需要全局變量比如PI(3.14...),可以寫一個(gè)類Math,定義static變量PI,調(diào)用Math.PI就可以使用了,這樣就達(dá)到我們使用全局變量的目的了
    2013-10-10

最新評論