java之点击一次之后失效_Java语言Inputstream重复使用(输入流在第二次使用的时候会失效)...

保存流对象(输入流在第二次使用的时候会失效),在需要用到InputStream的地方再将字节数组转化字节流使用,如果只需要用到一次inputstream流,就不用这样啦,直接用就OK。

下面直接上代码:

/**

* 保存流对象(输入流在第二次使用的时候会失效)

* 在需要用到InputStream的地方再封装成InputStream

* ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(buf);

* Workbook wb = new HSSFWorkbook(byteArrayInputStream);//byteArrayInputStream 继承了InputStream,故这样用并没有问题

* 如果只需要用到一次inputstream流,就不用这样啦,直接用就OK

* @param ins

*/

public byte[] saveaIns(InputStream ins){

byte[] buf = null;

try {

if(ins!=null){

buf = org.apache.commons.io.IOUtils.toByteArray(ins);//ins为InputStream流

}

} catch (IOException e) {

e.printStackTrace();

}

return buf;

}

/**

* 保存导入的SMS信息(需要对信息进行检验)

* @return

*/

public void saveImportData(){

try{

byte[] excelByte = null;//保存excel二进制流数据

//从httpRequest中得到上载的文件对象

Object[] o = VVMappingUtil.populateByMutilpartRequest(this.getRequest());

FileItem fileItem = (FileItem)o[0]; //只有一个上载文件

HashMapparams = new HashMap();//记录文件中的orgname,用来检验文件中是否存在重复的记录

params.put("version", "2003");//excel版本 为 2003

HashMapsmsnames = getAllName();//获取所有厂商名称(key:组织名称 value:id)

params.put("smsnames", JSONObject.fromObject(smsnames).toString());//数据库中的组织名称

//object是List>类型

ListsettleobjsInfo = null;

ExcelInfo info = null;

try{

//解析并校验excel内容

info = this.getExcelParams(fileItem);

excelByte = saveaIns(info.getIns());//用字节数组保存流对象(输入流在第二次使用的时候会失效)

info.setIns(new ByteArrayInputStream(excelByte));

//判断Excel是否为两页

if(!sheetnumIsOk(new ByteArrayInputStream(excelByte))){

returnMsg.put("reason", true);

returnMsg.put("msg", "上传的Excel应只有两页!");

this.writeRsp(VVMappingUtil.makeSuccessRsp(JSONObject.fromObject(returnMsg).toString())); return;

}

//判断是否存在异常列,若存在则删除

if(hasCheckColumn(fileItem,info)){

removeCkColumn(fileItem,info);

}

//判断sheet页中是否存在必要信息列

if(!sheetcolIsOk(new ByteArrayInputStream(excelByte))){

returnMsg.put("reason", true);

returnMsg.put("msg", "必要信息列不能修改或删除!");

this.writeRsp(VVMappingUtil.makeSuccessRsp(JSONObject.fromObject(returnMsg).toString())); return;

}

//判断Excel的sheet页名称是否为:发送账号列表,短信信息列表

if(!sheetnameIsOk(new ByteArrayInputStream(excelByte))){

returnMsg.put("reason", true);

returnMsg.put("msg", "上传的Excel的sheet页名称应为发送账号列表,短信信息列表!");

this.writeRsp(VVMappingUtil.makeSuccessRsp(JSONObject.fromObject(returnMsg).toString())); return;

}

HashMapsmsExcelNames = getExcelAllName(new ByteArrayInputStream(excelByte));//获取所有《账号发送列表》中的厂商名称(key:组织名称 value:id)

params.put("smsExcelNames", JSONObject.fromObject(smsExcelNames).toString());//《账号发送列表》中的组织名称

settleobjsInfo = (List) util.ExcelRecolve(info, params, smsbiz);

}catch(Exception ex){//捕获解析excel过程中的异常信息,反馈给前台,并终止导入操作

this.writeRsp(VVMappingUtil.makeFailureRsp(ex.getMessage()));

return;

}

if(settleobjsInfo != null && settleobjsInfo.size() > 0){

//判断是否有错误信息,如果有,则不保存并且将文件返回前台一个链接地址

for(int i=0;i> data = (List>) settleobjsInfo.get(i);

int voLen = info.getSheetinfo()[i].getVoName().length;

int len = data.size();

for(int j=0;j

上面发送短信的业务代码,需要多次用到文件流,保存文件流的具体实现就是saveaIns方法了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值