解決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)文章
Java基礎(chǔ)教程之對(duì)象的方法與數(shù)據(jù)成員
這篇文章主要介紹了Java基礎(chǔ)教程之對(duì)象的方法與數(shù)據(jù)成員,本文講解對(duì)象的方法與數(shù)據(jù)成員相關(guān)知識(shí),因?yàn)閖ava是面向?qū)ο笳Z(yǔ)言,本文的知識(shí)都是經(jīng)常要用到的,需要的朋友可以參考下2014-08-08
SpringBoot中的自定義FailureAnalyzer詳解
這篇文章主要介紹了SpringBoot中的自定義FailureAnalyzer詳解,FailureAnalyzer是一種很好的方式在啟動(dòng)時(shí)攔截異常并將其轉(zhuǎn)換為易讀的消息,并將其包含在FailureAnalysis中, Spring Boot為應(yīng)用程序上下文相關(guān)異常、JSR-303驗(yàn)證等提供了此類(lèi)分析器,需要的朋友可以參考下2023-12-12
關(guān)于Java三大特性之多態(tài)的總結(jié)
這篇文章主要介紹了關(guān)于Java三大特性之多態(tài)的總結(jié),內(nèi)容詳細(xì),涉及多態(tài)的定義,存在條件,好處,分類(lèi)及實(shí)現(xiàn)方式等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11
SpringBoot中webSocket實(shí)現(xiàn)即時(shí)聊天
這篇文章主要介紹了SpringBoot中webSocket實(shí)現(xiàn)即時(shí)聊天,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
Java關(guān)鍵字this(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)
java中的this隨處可見(jiàn),用法也多。通常情況下理解this關(guān)鍵字還是很容易的,但是在我初學(xué)的時(shí)候,有一個(gè)疑問(wèn)卻一直不能很清晰的理解,現(xiàn)在慢慢的理解了,下面通過(guò)本文給大家記錄下,有需要的朋友參考下2017-03-03

