废话不多说,上代码:
/**
* 解析txt文件,按|进行分割
* @param in
* @param fileDate
* @return
*/
private List readPremiumTxt(InputStream in, String bankCode, String fileDate) {
try {
//list接收数据
List<PremiumInfoVo> dataList = new ArrayList<PremiumInfoVo>();
//接受传入的流 改为gbk编码
BufferedReader br = new BufferedReader(new InputStreamReader(in,"UTF-8"));
//生成文件唯一编号
String fileId = UUID.randomUUID().toString();
// 读第一行,获取总条数和总金额
String lineTxt = br.readLine();
String[] firstLine = lineTxt.split("\\|");
if(firstLine.length != 2){
log.info("保费文件首行字段缺失!");
return null;
}
String totalNum = firstLine[0];
String totalAmount = firstLine[1];
//从第二行开始遍历
int i = 1 ;
while ((lineTxt = br.readLine()) != null) {
String[] arrStrings = lineTxt.split("\\|");
if(arrStrings.length!=6){
log.info("保费文件第{}行字段缺失!",i);
return null;
}
//保费信息实体
PremiumInfoVo premiumInfoVo = new PremiumInfoVo();
premiumInfoVo.setPremiumBankCode(bankCode);
//银行名称
if(Constant.PremiumConsts.BANK_CODE_PSBCCNBJ.equals(bankCode)){
premiumInfoVo.setPremiumBankCode(Constant.PremiumConsts.BANK_CODE_PSBCCNBJ_REAL);
premiumInfoVo.setPremiumBank(Constant.PremiumConsts.BANK_NAME_PSBCCNBJ);
}
premiumInfoVo.setTotalNum(totalNum.trim());
premiumInfoVo.setTotalAmount(totalAmount.trim());
premiumInfoVo.setOrderNo(arrStrings[0].trim());
premiumInfoVo.setCustNo(arrStrings[1].trim());
premiumInfoVo.setPaymentAmount(arrStrings[2].trim());
premiumInfoVo.setPaymentTime(arrStrings[3].trim());
premiumInfoVo.setPaymentWay(arrStrings[4].trim());
premiumInfoVo.setPLimit(arrStrings[5].trim());
premiumInfoVo.setFileDate(fileDate);
premiumInfoVo.setFileId(fileId);
premiumInfoVo.setCreateTime(new Date());
dataList.add(premiumInfoVo);
i++;
}
br.close();
return dataList;
} catch (Exception e) {
log.info("保费文件读取异常:{}",e);
return null;
}
}