問題:系統(tǒng)要求導入40萬條excel數(shù)據(jù),采用poi方式,服務(wù)器出現(xiàn)內(nèi)存溢出情況。
站在用戶的角度思考問題,與客戶深入溝通,找到沈陽網(wǎng)站設(shè)計與沈陽網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站制作、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、主機域名、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋沈陽地區(qū)。
解決方法:由于HSSFWorkbook workbook = new HSSFWorkbook(path)一次性將excel load到內(nèi)存中導致內(nèi)存不夠。
故采用讀取csv格式。由于csv的數(shù)據(jù)以x1,x2,x3形成,類似讀取txt文檔。
private BufferedReader bReader; /** * 執(zhí)行文件入口 */ public void execute() { try { if(!path.endsWith(".csv")){ logger.info("-----該文件不是以CSV文件,請上傳正確的文件格式------"); return ; } Long startTime = System.currentTimeMillis(); logger.info("------開始執(zhí)行定時任務(wù),時間=" + startTime); readCSV(path); Long endTime = System.currentTimeMillis(); logger.info("------結(jié)束定時任務(wù),時間=" + endTime + "---耗時=" + (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 = ""; //忽略第一行標題 for (int i = 0; i < 1; i++) { line = bReader.readLine(); } while((line = bReader.readLine()) != null){ if (line.trim() != "") { //分割開來的即是對應(yīng)的每個單元格,注意空的情況 String[] result = line.split(","); } } } } finally { if (bReader != null) { bReader.close(); } } }
以上這篇解決Java導入excel大量數(shù)據(jù)出現(xiàn)內(nèi)存溢出的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持創(chuàng)新互聯(lián)。