解決Java導(dǎo)入excel大量數(shù)據(jù)出現(xiàn)內(nèi)存溢出的問(wèn)題
問(wèn)題:系統(tǒng)要求導(dǎo)入40萬(wàn)條excel數(shù)據(jù),采用poi方式,服務(wù)器出現(xiàn)內(nèi)存溢出情況。
解決方法:由于HSSFWorkbook workbook = new HSSFWorkbook(path)一次性將excel load到內(nèi)存中導(dǎo)致內(nèi)存不夠。
故采用讀取csv格式。由于csv的數(shù)據(jù)以x1,x2,x3形成,類(lèi)似讀取txt文檔。
private BufferedReader bReader;
/**
* 執(zhí)行文件入口
*/
public void execute() {
try {
if(!path.endsWith(".csv")){
logger.info("-----該文件不是以CSV文件,請(qǐng)上傳正確的文件格式------");
return ;
}
Long startTime = System.currentTimeMillis();
logger.info("------開(kāi)始執(zhí)行定時(shí)任務(wù),時(shí)間=" + startTime);
readCSV(path);
Long endTime = System.currentTimeMillis();
logger.info("------結(jié)束定時(shí)任務(wù),時(shí)間=" + endTime + "---耗時(shí)="
+ (endTime - startTime));
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 讀取csv并處理數(shù)據(jù)
* @param path
* @throws Exception
*/
private void readCSV(String path) throws Exception {
File file = new File(path);
try {
bReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "gbk"));
String line = "";
//忽略第一行標(biāo)題
for (int i = 0; i < 1; i++) {
line = bReader.readLine();
}
while((line = bReader.readLine()) != null){
if (line.trim() != "") {
//分割開(kāi)來(lái)的即是對(duì)應(yīng)的每個(gè)單元格,注意空的情況
String[] result = line.split(",");
}
}
}
} finally {
if (bReader != null) {
bReader.close();
}
}
}
以上這篇解決Java導(dǎo)入excel大量數(shù)據(jù)出現(xiàn)內(nèi)存溢出的問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Java DWR內(nèi)存泄漏問(wèn)題解決方案
- macOS上使用gperftools定位Java內(nèi)存泄漏問(wèn)題及解決方案
- Java內(nèi)存模型可見(jiàn)性問(wèn)題相關(guān)解析
- Java內(nèi)存泄漏問(wèn)題處理方法經(jīng)驗(yàn)總結(jié)
- 完美解決java讀取大文件內(nèi)存溢出的問(wèn)題
- 詳解Java中synchronized關(guān)鍵字的死鎖和內(nèi)存占用問(wèn)題
- 解析Java的JNI編程中的對(duì)象引用與內(nèi)存泄漏問(wèn)題
- JAVA程序內(nèi)存溢出問(wèn)題原因分析
- Java中典型的內(nèi)存泄露問(wèn)題和解決方法
- 基于Java 數(shù)組內(nèi)存分配的相關(guān)問(wèn)題
- Java 內(nèi)存安全問(wèn)題的注意事項(xiàng)
相關(guān)文章
SpringBoot整合DeepSeek技術(shù)指南(實(shí)際應(yīng)用場(chǎng)景)
這篇文章主要介紹了SpringBoot整合DeepSeek技術(shù)指南,本文通過(guò)實(shí)際應(yīng)用場(chǎng)景模擬給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2025-04-04
Mybatis?如何開(kāi)啟控制臺(tái)打印sql語(yǔ)句
這篇文章主要介紹了Mybatis?如何開(kāi)啟控制臺(tái)打印sql語(yǔ)句問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
Mybatis的@select和@SelectProvider注解方式動(dòng)態(tài)SQL語(yǔ)句解讀
這篇文章主要介紹了Mybatis的@select和@SelectProvider注解方式動(dòng)態(tài)SQL語(yǔ)句,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
SpringBoot actuator 健康檢查不通過(guò)的解決方案
這篇文章主要介紹了SpringBoot actuator 健康檢查不通過(guò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
springboot運(yùn)行到dokcer中 dockerfile的場(chǎng)景分析
這篇文章主要介紹了springboot運(yùn)行到dokcer中 dockerfile,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
Java結(jié)構(gòu)性設(shè)計(jì)模式中的裝飾器模式介紹使用
裝飾器模式又名包裝(Wrapper)模式。裝飾器模式以對(duì)客戶端透明的方式拓展對(duì)象的功能,是繼承關(guān)系的一種替代方案,本篇文章以虹貓藍(lán)兔生動(dòng)形象的為你帶來(lái)詳細(xì)講解2022-09-09
Feign利用自定義注解實(shí)現(xiàn)路徑轉(zhuǎn)義詳解
這篇文章主要講解一下如何通過(guò)注解實(shí)現(xiàn)對(duì)路由中的路徑進(jìn)行自定義編碼,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定的幫助,需要的可以參考一下2022-06-06
Java使用Sharding-JDBC分庫(kù)分表進(jìn)行操作
Sharding-JDBC 是無(wú)侵入式的 MySQL 分庫(kù)分表操作工具,本文主要介紹了Java使用Sharding-JDBC分庫(kù)分表進(jìn)行操作,感興趣的可以了解一下2021-08-08
SpringBoot中屬性賦值操作的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot中屬性賦值操作的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10

