POI大数据量写入

大文件写HSSF

缺点:只能写65536行,否则会抛出异常
优点:过程中写入缓存,不操作磁盘,最后一次性写入,速度较快

  String PATH = "D:\\code\\springboot\\springboot-resume\\springboot-resume";
  @Test
  public void HssfBigExcel() throws Exception {
      long begin = System.currentTimeMillis();
      //1、创建一个工作簿
      Workbook workbook = new HSSFWorkbook();
      //2、创建一个工作表
      Sheet sheet =workbook.createSheet("HssfBigExcel工作表");
      //3、创建一个行
      for (int rowNumber = 0; rowNumber < 65536; rowNumber++){
          Row row = sheet.createRow(rowNumber);
          for(int cellNumber = 0;cellNumber<10;cellNumber++){
              Cell cell = row.createCell(cellNumber);
              cell.setCellValue(cellNumber);
          }
      }
      //生成一张表
      FileOutputStream fileOutputStream = new FileOutputStream(PATH + "HssfBigExcel工作表.xls");
      workbook.write(fileOutputStream);
      fileOutputStream.close();
      long end = System.currentTimeMillis();
      System.out.println((double) (end-begin)/1000);
      System.out.println("生成完毕");
  }

完成时间

大文件写XSSF

缺点:写数据时速度非常慢,非常耗内存,也会发生内存溢出,如100万条
优点:可以写入较多数据,如20万条

  String PATH = "D:\\code\\springboot\\springboot-resume\\springboot-resume";

  @Test
  public void HssfBigExcel() throws Exception {
      long begin = System.currentTimeMillis();
      //1、创建一个工作簿
      Workbook workbook = new XSSFWorkbook();
      //2、创建一个工作表
      Sheet sheet =workbook.createSheet("HssfBigExcel工作表");
      //3、创建一个行
      for (int rowNumber = 0; rowNumber < 65536; rowNumber++){
          Row row = sheet.createRow(rowNumber);
          for(int cellNumber = 0;cellNumber<10;cellNumber++){
              Cell cell = row.createCell(cellNumber);
              cell.setCellValue(cellNumber);
          }
      }
      //生成一张表
      FileOutputStream fileOutputStream = new FileOutputStream(PATH + "XssfBigExcel工作表.xlsx");
      workbook.write(fileOutputStream);
      fileOutputStream.close();
      long end = System.currentTimeMillis();
      System.out.println((double) (end-begin)/1000);
      System.out.println("生成完毕");
  }

完成时间

大文件写SXSSF(速度最快效率最高)

为了解决XSSF中写文件速度太慢的问题,采用缓存机制,但是会存在临时文件,需要删除
清除临时文件 ((SXSSFWorkbook) workbook).dispose();

  String PATH = "D:\\code\\springboot\\springboot-resume\\springboot-resume";

  @Test
  public void SXssfBigExcel() throws Exception {
      long begin = System.currentTimeMillis();
      //1、创建一个工作簿
      Workbook workbook = new SXSSFWorkbook();
      //2、创建一个工作表
      Sheet sheet =workbook.createSheet("SXssfBigExcel工作表");
      //3、创建一个行
      for (int rowNumber = 0; rowNumber < 150000; rowNumber++){
          Row row = sheet.createRow(rowNumber);
          for(int cellNumber = 0;cellNumber<10;cellNumber++){
              Cell cell = row.createCell(cellNumber);
              cell.setCellValue(cellNumber);
          }
      }
      //生成一张表
      FileOutputStream fileOutputStream = new FileOutputStream(PATH + "XssfBigExcel工作表.xlsx");
      workbook.write(fileOutputStream);
      fileOutputStream.close();
      //清除临时文件
      ((SXSSFWorkbook) workbook).dispose();
      long end = System.currentTimeMillis();
      System.out.println((double) (end-begin)/1000);
      System.out.println("生成完毕");
  }

完成时间:

你可能感兴趣的:(POI大数据量写入)