系统要求导入40万条excel数据,采用poi方式,服务器出现内存溢出情况。
由于HSSFWorkbook工作簿=new HSSFWorkbook(路径)一次性将excel负载到内存中导致内存不够。
故采用读取csv格式。由于csv的数据以x1, x2, x3形成,类似读取txt文档。
私人BufferedReader破冰船;/* * *执行文件入口 */公共空间execute () { 尝试{ 如果(! path.endsWith (. csv)) { logger.info(“- - - - - -该文件不是以CSV文件,请上传正确的文件格式- - - - - -”); 返回; } 长时间的开始时间=System.currentTimeMillis (); logger.info(“- - - - - -开始执行定时任务,时间=" +开始时间); readCSV(路径); 长endTime=System.currentTimeMillis (); logger.info(“- - - - - -结束定时任务,时间=" + endTime +”——耗时=" + (endTime -开始时间)); }捕捉(异常e) { e.printStackTrace (); } }/* * *读取csv并处理数据 * @param路径 * @throws例外 */私人空间readCSV (String路径){抛出异常 文件文件=新文件(路径); 尝试{ 破冰船=new BufferedReader(新InputStreamReader(新FileInputStream(文件)," gbk ")); 字符串行=" ";//忽略第一行标题 for (int i=0;我& lt;1;我+ +){ 行=bReader.readLine (); } 在((=bReader.readLine行())!=null) { 如果(line.trim () !=" ") {//分割开来的即是对应的每个单元格,注意空的情况 String[]结果=line.split (", "); } } } 最后}{ 如果(破冰船!=null) { bReader.close (); } } }
以上这篇解决Java导入excel大量数据出现内存溢出的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。