您好,登錄后才能下訂單哦!
問題:系統要求導入40萬條excel數據,采用poi方式,服務器出現內存溢出情況。
解決方法:由于HSSFWorkbook workbook = new HSSFWorkbook(path)一次性將excel load到內存中導致內存不夠。
故采用讀取csv格式。由于csv的數據以x1,x2,x3形成,類似讀取txt文檔。
private BufferedReader bReader; /** * 執行文件入口 */ public void execute() { try { if(!path.endsWith(".csv")){ logger.info("-----該文件不是以CSV文件,請上傳正確的文件格式------"); return ; } Long startTime = System.currentTimeMillis(); logger.info("------開始執行定時任務,時間=" + startTime); readCSV(path); Long endTime = System.currentTimeMillis(); logger.info("------結束定時任務,時間=" + endTime + "---耗時=" + (endTime - startTime)); } catch (Exception e) { e.printStackTrace(); } } /** * 讀取csv并處理數據 * @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() != "") { //分割開來的即是對應的每個單元格,注意空的情況 String[] result = line.split(","); } } } } finally { if (bReader != null) { bReader.close(); } } }
以上這篇解決Java導入excel大量數據出現內存溢出的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。