excel导入并解析入库,多线程实现

此demo涉及多线程,远程调用,excel从页面读取解析(用流的方式读);先从页面选择excel, 然后点击导入按钮, 后台用POI解析校验, 然后远程调用ejb,存入数据库.excel导入并解析入库,多线程实现(注意:excel文件并没有存储在服务器.)框架是基于struts1,  里面的多线程实现方式是实现Callable接口.

excel导入并解析入库,多线程实现

public ActionForward importUleAddress(ActionMapping mapping,
ActionForm form, HttpServletRequest request,
HttpServletResponse response){
response.setContentType("text/html;charset=utf-8");
Map resultMap = new HashMap();
//默认启动的线程数量
int threaPoolNum = 10;
long starTime=System.currentTimeMillis();
//创建定长线程池
ExecutorService espool = Executors.newFixedThreadPool(threaPoolNum);
//创建校验数据线程序列集合
// ArrayList checkDataThreadList = new ArrayList();
//创建插入数据线程序列集合
ArrayList insertUleThreadList = new ArrayList();
//接收返回值
List>> futureList = new ArrayList>>();
List> uleLists = new ArrayList>();
violationCancelInfoForm proForm = (violationCancelInfoForm) form;
//为每一个线程创建独立的参数
for (int i = 0; i < threaPoolNum; i++) {
uleLists.add(i, new ArrayList());
}
log.info("------------ start read file!------------:");
try {
        InputStream input = proForm.getCsvFile().getInputStream();
        String excelUrl = proForm.getCsvFile().getFileName();
        boolean isE2007 = false;     //判断是否是excel2007格式
        if(excelUrl.endsWith("xlsx") || excelUrl.endsWith("XLSX")){
        isE2007 = true;
        }
        // 根据文件格式(2003或者2007)来初始化
Workbook wb = isE2007 ? new XSSFWorkbook(input) : new HSSFWorkbook(input);
Sheet sheet = wb.getSheetAt(0);     //获得第一个表单
Iterator rows = sheet.rowIterator();   //获得第一个表单的迭代器
//存放excel表格中的code用于判断是否有重复code
List insertList = new ArrayList();
//读取文件中的数据放入insertList
//当前行数
int rowNum = 0;
while (rows.hasNext()) {
Row row = rows.next();           //获得行数据
rowNum = row.getRowNum();
//第一行无效数据,跳过
            //校验数据有无
            Map checkResultMap = checkData(row);
            if(checkResultMap!=null){
                AddressMerchantForm uleAddress = new AddressMerchantForm();
                uleAddress = (AddressMerchantForm) checkResultMap.get("uleAddress");
   
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值