解决Java导入excel大量数据出现内存溢出的问题

 更新时间:2018年06月26日 09:53:00   作者:dandanfeng1992  
今天小编就为大家分享一篇解决Java导入excel大量数据出现内存溢出的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

问题:系统要求导入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大量数据出现内存溢出的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java异常处理的简单练习

    java异常处理的简单练习

    下面小编就为大家带来一篇java异常处理的简单练习。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • idea的使用之关于tomcat热部署的教程

    idea的使用之关于tomcat热部署的教程

    这篇文章主要介绍了idea的使用之关于tomcat热部署的教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • 深入理解Spring AOP

    深入理解Spring AOP

    这篇文章主要介绍了深入理解Spring AOP,详细的介绍了spring aop的具体实现与理论
    2017-01-01
  • Java基础教程之对象的方法与数据成员

    Java基础教程之对象的方法与数据成员

    这篇文章主要介绍了Java基础教程之对象的方法与数据成员,本文讲解对象的方法与数据成员相关知识,因为java是面向对象语言,本文的知识都是经常要用到的,需要的朋友可以参考下
    2014-08-08
  • SpringBoot中的自定义FailureAnalyzer详解

    SpringBoot中的自定义FailureAnalyzer详解

    这篇文章主要介绍了SpringBoot中的自定义FailureAnalyzer详解,FailureAnalyzer是一种很好的方式在启动时拦截异常并将其转换为易读的消息,并将其包含在FailureAnalysis中, Spring Boot为应用程序上下文相关异常、JSR-303验证等提供了此类分析器,需要的朋友可以参考下
    2023-12-12
  • 关于Java三大特性之多态的总结

    关于Java三大特性之多态的总结

    这篇文章主要介绍了关于Java三大特性之多态的总结,内容详细,涉及多态的定义,存在条件,好处,分类及实现方式等相关内容,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • SpringBoot中webSocket实现即时聊天

    SpringBoot中webSocket实现即时聊天

    这篇文章主要介绍了SpringBoot中webSocket实现即时聊天,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Spring中容器创建的四种方式示例

    Spring中容器创建的四种方式示例

    这篇文章主要介绍了Spring中容器创建的四种方式示例,Spring容器是Spring框架的核心部分,它负责管理和组织应用程序中的对象,它提供了一种轻量级的、非侵入式的方式来实现对象的创建、依赖注入和生命周期管理,需要的朋友可以参考下
    2023-10-10
  • 四种Java线程池用法解析

    四种Java线程池用法解析

    这篇文章主要为大家解析四种Java线程池用法,内容详细,分析细致,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • Java关键字this(动力节点Java学院整理)

    Java关键字this(动力节点Java学院整理)

    java中的this随处可见,用法也多。通常情况下理解this关键字还是很容易的,但是在我初学的时候,有一个疑问却一直不能很清晰的理解,现在慢慢的理解了,下面通过本文给大家记录下,有需要的朋友参考下
    2017-03-03

最新评论