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

Java使用easyExcel實(shí)現(xiàn)Excel文件解析

 更新時(shí)間:2025年02月11日 09:22:57   作者:眾樂樂_2008  
這篇文章主要為大家詳細(xì)介紹了Java如何使用easyExcel實(shí)現(xiàn)Excel文件解析,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

要使提供的 ExcelModelListener 類來解析 Excel 文件并實(shí)現(xiàn)批量存儲(chǔ)數(shù)據(jù)庫的功能,需要結(jié)合 EasyExcel 庫來讀取 Excel 數(shù)據(jù)。具體來說,可以使用 EasyExcel.read() 方法來讀取 Excel 文件,并指定 ExcelModelListener 作為事件監(jiān)聽器。

下面是調(diào)用 ExcelModelListener 進(jìn)行 Excel 文件解析的完整示例代碼:

1. 首先,確保已經(jīng)添加了 EasyExcel 依賴

如果你還沒有在 Maven 項(xiàng)目中引入 EasyExcel,可以在 pom.xml 文件中添加如下依賴:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.0.5</version> <!-- 確保使用最新版本 -->
</dependency>

2. 調(diào)用 ExcelModelListener 的代碼

假設(shè)你有一個(gè) Excel 文件 data.xlsx,并且 ExcelMode 是與 Excel 數(shù)據(jù)對應(yīng)的 Java 類,你可以按照以下步驟來調(diào)用監(jiān)聽器解析 Excel 文件:

ExcelMode 類示例(簡化版)

package com.zh.oukele.model;
 
public class ExcelMode {
 
    private String field1;
    private String field2;
    // 這里是你Excel中每一列的對應(yīng)字段
 
    // 省略getter和setter
}

使用 ExcelModelListener 解析 Excel 文件

package com.zh.oukele;
 
import com.alibaba.excel.EasyExcel;
import com.zh.oukele.listener.ExcelModelListener;
import com.zh.oukele.model.ExcelMode;
 
import java.io.File;
 
public class ExcelImportService {
 
    public static void main(String[] args) {
        String fileName = "path/to/your/excel/data.xlsx"; // Excel 文件路徑
 
        // 調(diào)用 EasyExcel 來讀取文件
        EasyExcel.read(fileName, ExcelMode.class, new ExcelModelListener())
                .sheet()
                .doRead();
    }
}

3. 代碼解析

EasyExcel.read(fileName, ExcelMode.class, new ExcelModelListener()):

這行代碼調(diào)用了 EasyExcel 的讀取方法,指定了 Excel 文件的路徑 fileName,以及用于解析 Excel 數(shù)據(jù)的 Java 類 ExcelMode。

ExcelModelListener 被傳遞給 EasyExcel 作為事件監(jiān)聽器,這樣 EasyExcel 在讀取每一行數(shù)據(jù)時(shí),就會(huì)調(diào)用 ExcelModelListener 中的 invoke() 方法。
.sheet():

該方法指定讀取 Excel 文件中的一個(gè) sheet(工作表)。如果 Excel 文件有多個(gè) sheet,你可以指定其他 sheet,比如 .sheet(1) 或 .sheet("sheetName")。
.doRead():

該方法觸發(fā)實(shí)際的 Excel 數(shù)據(jù)讀取操作。

4. ExcelModelListener 的工作流程

逐行讀取數(shù)據(jù):

ExcelModelListener 的 invoke() 方法會(huì)在每一行數(shù)據(jù)被讀取時(shí)被調(diào)用。你可以在這個(gè)方法中處理每一行的數(shù)據(jù),例子中是將數(shù)據(jù)存儲(chǔ)到 list 中。

批量處理:

每當(dāng)讀取的數(shù)據(jù)達(dá)到設(shè)定的批量大?。ㄈ?BATCH_COUNT = 5),就會(huì)調(diào)用 saveData() 方法將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫中,之后清空 list。

全部數(shù)據(jù)解析完成后:

doAfterAllAnalysed() 會(huì)在 Excel 文件解析完成后被調(diào)用,通常用于進(jìn)行一些收尾操作,比如存儲(chǔ)最后一批數(shù)據(jù)或釋放資源。

5. 完整代碼示例

假設(shè) Excel 文件中有兩列數(shù)據(jù)(如 field1 和 field2),以下是完整的代碼示例:

ExcelMode.java

package com.zh.oukele.model;
 
public class ExcelMode {
 
    private String field1;
    private String field2;
 
    // Getter 和 Setter 方法
    public String getField1() {
        return field1;
    }
 
    public void setField1(String field1) {
        this.field1 = field1;
    }
 
    public String getField2() {
        return field2;
    }
 
    public void setField2(String field2) {
        this.field2 = field2;
    }
 
    @Override
    public String toString() {
        return "ExcelMode{" +
                "field1='" + field1 + '\'' +
                ", field2='" + field2 + '\'' +
                '}';
    }
}

ExcelModelListener.java(主要的類)

package com.zh.oukele.listener;
 
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.zh.oukele.model.ExcelMode;
 
import java.util.ArrayList;
import java.util.List;
 
public class ExcelModelListener extends AnalysisEventListener<ExcelMode> {
 
    private static final int BATCH_COUNT = 5;
    List<ExcelMode> list = new ArrayList<ExcelMode>();
    private static int count = 1;
 
    @Override
    public void invoke(ExcelMode data, AnalysisContext context) {
        System.out.println("解析到一條數(shù)據(jù): { " + data.toString() + " }");
        list.add(data);
        count++;
        if (list.size() >= BATCH_COUNT) {
            saveData(count);
            list.clear();
        }
    }
 
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        saveData(count);
        System.out.println("所有數(shù)據(jù)解析完成!");
        System.out.println("count :" + count);
    }
 
    private void saveData(int count) {
        System.out.println("{ " + count + " }條數(shù)據(jù),開始存儲(chǔ)數(shù)據(jù)庫!" + list.size());
        // 這里你可以將 list 中的數(shù)據(jù)存入數(shù)據(jù)庫
        System.out.println("存儲(chǔ)數(shù)據(jù)庫成功!");
    }
}

ExcelImportService.java(調(diào)用和執(zhí)行)

package com.zh.oukele;
 
import com.alibaba.excel.EasyExcel;
import com.zh.oukele.listener.ExcelModelListener;
import com.zh.oukele.model.ExcelMode;
 
public class ExcelImportService {
 
    public static void main(String[] args) {
        String fileName = "path/to/your/excel/data.xlsx"; // Excel 文件路徑
 
        // 調(diào)用 EasyExcel 來讀取文件
        EasyExcel.read(fileName, ExcelMode.class, new ExcelModelListener())
                .sheet()
                .doRead();
    }
}

總結(jié)

你通過 EasyExcel.read() 讀取 Excel 文件,并且指定 ExcelModelListener 作為事件監(jiān)聽器。

ExcelModelListener 會(huì)處理每一行數(shù)據(jù),當(dāng)達(dá)到設(shè)定的批量大小時(shí)進(jìn)行批量存儲(chǔ)。

數(shù)據(jù)解析完成后,可以通過 doAfterAllAnalysed() 做一些收尾操作。

這個(gè)流程非常適合處理大量數(shù)據(jù)的 Excel 文件,能夠在保證內(nèi)存高效的同時(shí),還能進(jìn)行批量數(shù)據(jù)的持久化操作。

到此這篇關(guān)于Java使用easyExcel實(shí)現(xiàn)Excel文件解析的文章就介紹到這了,更多相關(guān)Java easyExcel解析Excel內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解JVM類加載機(jī)制及類緩存問題的處理方法

    詳解JVM類加載機(jī)制及類緩存問題的處理方法

    這篇文章主要給大家介紹了關(guān)于JVM類加載機(jī)制及類緩存問題的處理方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • java 嵌套類的詳解及實(shí)例代碼

    java 嵌套類的詳解及實(shí)例代碼

    這篇文章主要介紹了java 嵌套類的詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Spring?Security+JWT如何實(shí)現(xiàn)前后端分離權(quán)限控制

    Spring?Security+JWT如何實(shí)現(xiàn)前后端分離權(quán)限控制

    本篇將手把手教你用?Spring?Security?+?JWT?搭建一套完整的登錄認(rèn)證與權(quán)限控制體系,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Java中多個(gè)線程交替循環(huán)執(zhí)行的實(shí)現(xiàn)

    Java中多個(gè)線程交替循環(huán)執(zhí)行的實(shí)現(xiàn)

    有些時(shí)候面試官經(jīng)常會(huì)問,兩個(gè)線程怎么交替執(zhí)行呀,本文就來詳細(xì)的介紹一下Java中多個(gè)線程交替循環(huán)執(zhí)行的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • 關(guān)于Java實(shí)現(xiàn)word(docx、doc)轉(zhuǎn)html的完美解決方案

    關(guān)于Java實(shí)現(xiàn)word(docx、doc)轉(zhuǎn)html的完美解決方案

    文章介紹了多種將Word文檔轉(zhuǎn)換為HTML的方法,包括使用Microsoft Word自帶的導(dǎo)出功能、第三方工具和編程實(shí)現(xiàn),展示了如何實(shí)現(xiàn)將.docx文件轉(zhuǎn)換為HTML文件,并自動(dòng)生成目錄、處理分頁符和增強(qiáng)表格樣式等功能,感興趣的朋友一起看看吧
    2025-01-01
  • SpringBoot 枚舉類型的自動(dòng)轉(zhuǎn)換的實(shí)現(xiàn)

    SpringBoot 枚舉類型的自動(dòng)轉(zhuǎn)換的實(shí)現(xiàn)

    一般我們在數(shù)據(jù)庫都會(huì)定義數(shù)值型的枚舉常量,不管是序列化還是反序列化都是需要我們手動(dòng)去轉(zhuǎn)換成枚舉類型的,本文主要介紹了Spring Boot 枚舉類型的自動(dòng)轉(zhuǎn)換,感興趣的可以了解一下
    2022-03-03
  • 當(dāng)Mybatis遇上目錄樹超全完美解決方案

    當(dāng)Mybatis遇上目錄樹超全完美解決方案

    這篇文章主要介紹了當(dāng)Mybatis遇上目錄樹有哪些解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • java8中NIO緩沖區(qū)(Buffer)的數(shù)據(jù)存儲(chǔ)詳解

    java8中NIO緩沖區(qū)(Buffer)的數(shù)據(jù)存儲(chǔ)詳解

    在本篇文章中小編給大家分享了關(guān)于java8中NIO緩沖區(qū)(Buffer)的數(shù)據(jù)存儲(chǔ)的相關(guān)知識點(diǎn),需要的朋友們參考下。
    2019-04-04
  • Java視頻斷點(diǎn)上傳的實(shí)現(xiàn)示例

    Java視頻斷點(diǎn)上傳的實(shí)現(xiàn)示例

    斷點(diǎn)續(xù)傳指的是在下載或上傳時(shí),將下載或上傳任務(wù)人為的劃分為幾個(gè)部分,本文主要介紹了Java視頻斷點(diǎn)上傳的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • JDK8中新增的Optional工具類基本使用

    JDK8中新增的Optional工具類基本使用

    Optional不是對null關(guān)鍵字的一種替代,而是對于null判定提供了一種更加優(yōu)雅的實(shí)現(xiàn),接下來通過本文給大家分享JDK8中新增的Optional工具類基本使用,感興趣的朋友跟隨小編一起看看吧
    2021-06-06

最新評論