今天测试了下POI和jxl.jar性能
测试环境:
jxl包:好像是1.4 低于2.0 (忘记了)
poi:poi-3.5-FINAL-20090928.jar
环境:CPU:Pentium(R) 1.4GHZ ,1.5GB内存 MyEclipse5.0 JDK1.5
机器不行,不同电脑上跑出效果不一样,但是仍然可以窥视到POI和jxl效率
-
Java code
-
package com.jarvis.mul; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import jxl.Cell; import jxl.LabelCell; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFName; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; /** * @作者 Jarvis * @创建日期 Dec 2, 2009 * @版本 V 1.0 */ public class PoiredadXLS { String filepath = " E:/5.xls " ; public void readSpeed(){ try { // 创建对Excel工作簿文件的引用 long t1 = System.currentTimeMillis(); FileInputStream rs = new FileInputStream(filepath) ; HSSFWorkbook workbook = new HSSFWorkbook(rs); long t2 = System.currentTimeMillis(); System.out.println( " 加载耗时: " + (t2 - t1)); HashMap map = new HashMap(); int total = workbook.getNumberOfSheets(); // 获取sheet个数 int start = 0 ; int end = 0 ; for ( int i = 0 ; i < total ; i ++ ){ HSSFSheet sheet = workbook.getSheetAt(i); // 按索引获取sheet引用 System.out.println(sheet.getSheetName()); start = sheet.getFirstRowNum(); // sheet起始行索引 end = sheet.getLastRowNum(); // sheet起结束行索引 int temp = 1 ; HSSFRow row = null ; HSSFCell cell1 = null ; HSSFCell cell2 = null ; while (temp < end){ row = sheet.getRow(temp); // 获取第N行表格数据 cell1 = row.getCell( 2 ); // 获取指定列单元格 cell2 = row.getCell( 3 ); // 获取指定列单元格 if (cell1 != null && cell1 != null ){ map.put(cell1.toString(), cell2.toString()) ; } temp ++ ; } } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void readExcel(){ try { HashMap map = new HashMap(); long t1 = System.currentTimeMillis(); FileInputStream is = new FileInputStream(filepath); Workbook rwb = Workbook.getWorkbook(is); // 从输入流创建Workbook long t2 = System.currentTimeMillis(); System.out.println( " 加载耗时: " + (t2 - t1)); String[] sheetname = rwb.getSheetNames(); // 获取所有的sheet名称,返回一个String数组 int sleng = sheetname.length ; for ( int i = 0 ; i < sleng ; i ++ ){ Sheet sheet = rwb.getSheet(sheetname[i]) ; System.out.println(sheetname[i]); int rows = sheet.getRows(); // 获取表格的总行数 int temp = 1 ; Cell cell1 = null ; Cell cell2 = null ; while (temp < rows){ cell1 = sheet.getCell( 2 , temp); // 第一个参数代表列 第二个参数代表行 cell2 = sheet.getCell( 3 , temp); // 第一个参数代表列 第二个参数代表行 if (cell1 != null && cell2 != null ){ map.put(cell1.getContents(), cell2.getContents()) ; } temp ++ ; } } rwb.close(); // 关闭工作薄 流 } catch (BiffException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { PoiredadXLS r = new PoiredadXLS(); long s = System.currentTimeMillis(); r.readSpeed(); r.readExcel(); long e = System.currentTimeMillis(); System.out.println( " 总耗时: " + (e - s)); } }
测试数据和结果如下:
文件 POI加载耗时 POI总耗时 JXL加载耗时 Jxl总耗时
文件大小57KB 1172 ms 1172 ms 1265 ms 2250 ms
100行数据
文件大小652KB 2297 ms 2313 ms 4406 ms 9750 ms
1000行数据
文件大小2.24M 3109ms 3140ms 16313ms 37453ms
大约6000行数据
机器比较烂,跑出的时间都很长
大家以后用POI吧