1)在支付中會涉及到對帳問題,那麼對帳文件解析就是個較爲棘手的事情,那今天就來看下常見的對帳文件格式與解析;數據庫
1)支付寶與微信的對帳文件都是.csv格式,這樣的對帳文件能夠使用exceld打開,也能夠使用文本編輯器打開,微信
其餘類型對帳文件大可能是XML文件,下面來看下是什麼樣子的文件編輯器
支付寶文件spa
1.樣式excel
2.exceld打開樣式code
3.編輯器打開樣式xml
1.文本打開樣式對象
1.XML類型文件是咱們經常遇到的類型,解析方式要根據內容狀況來進行blog
1)根據不一樣的內容設置不一樣的解析方法支付寶
2)微信csv文件解析示例(支付寶同理)
//讀取文件 File file = new File("F:/test/wexin.csv"); //解決中文亂碼 InputStreamReader isr=null; BufferedReader buff =null; try { isr = new InputStreamReader(new FileInputStream(file), "UTF-8"); buff = new BufferedReader(isr); String line=null; //數據容器 List<WwXin> wxinlist=new ArrayList<WwXin>(); WwXin wXin =null; while ((line=buff.readLine())!=null) { //去除` String replace = line.replace("`", ""); String[] split = replace.split(","); //去除後兩行,第一行也是不須要存到數據庫的,在後續操做中去掉第一條數據 if(split.length==24) { //符合要求 wXin=new WwXin(); wXin.setTime(split[0]); wXin.setId(split[1]); wXin.setShh(split[2]); wXin.setZshh(split[3]); wXin.setSbh(split[4]); wXin.setWxddh(split[5]); wXin.setShddh(split[6]); wXin.setYhbs(split[7]); wXin.setJylx(split[8]); wXin.setJyzt(split[9]); wXin.setFkyh(split[10]); wXin.setHbzl(split[11]); wXin.setZje(split[12]); wXin.setDjjlj(split[13]); wXin.setWxtkdh(split[14]); wXin.setHztkdh(split[15]); wXin.setTkje(split[16]); wXin.setLjje(split[17]); wXin.setTklx(split[18]); wXin.setTkzt(split[19]); wXin.setSbmc(split[20]); wXin.setShsjb(split[21]); wXin.setSxf(split[22]); wXin.setFl(split[23]); //添加 wxinlist.add(wXin); } } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { try { if(isr!=null) { isr.close(); } } catch (IOException e) { e.printStackTrace(); } try { if(buff!=null) { buff.close(); } } catch (IOException e) { e.printStackTrace(); } }
3)XMl文件解析(要根據具體格式具體解析)
List<AccountQueryAccountLogVO> list = new ArrayList<AccountQueryAccountLogVO>(); try { //建立SAXReader對象讀取proudct4.xml文件 SAXReader reader = new SAXReader(); //從本地讀取文件,讀取xml File file = new File("F:/test/2017-12-26.xml"); Document document = reader.read(file); //讀取根節點 Element rootElement = document.getRootElement(); //獲取所有節點 Iterator<Element> it1 = rootElement.elementIterator(); //遍歷子節點 while(it1.hasNext()){//判斷是否有下一個子元素 //子節點 Element productEle = it1.next(); Iterator<Element> it2 = productEle.elementIterator(); //遍歷product標籤的子元素 while(it2.hasNext()){ //獲取每一個子元素 Element eles = it2.next(); Iterator<Element> it3 = eles.elementIterator(); while(it3.hasNext()){ //獲取每一個子元素 Element next = it3.next(); Iterator<Element> it4 = next.elementIterator(); AccountQueryAccountLogVO accountQueryAccountLogVO =null; while (it4.hasNext()) { Element next2 = it4.next(); Iterator<Element> it5 = next2.elementIterator(); accountQueryAccountLogVO= new AccountQueryAccountLogVO(); while (it5.hasNext()) { Element next3 = it5.next(); String name = next3.getName(); switch (name) { case "balance": String data = (String)next3.getData(); accountQueryAccountLogVO.setBalance(data); break; case "buyer_account": String buyerAccount = (String)next3.getData(); accountQueryAccountLogVO.setBuyerAccount(buyerAccount); break; case "currency": String currency = (String)next3.getData(); accountQueryAccountLogVO.setCurrency(currency); break; case "deposit_bank_no": String depositBankNo = (String)next3.getData(); accountQueryAccountLogVO.setDepositBankNo(depositBankNo); break; case "goods_title": String goodsTitle = (String)next3.getData(); accountQueryAccountLogVO.setGoodsTitle(goodsTitle); break; case "income": String income = (String)next3.getData(); accountQueryAccountLogVO.setIncome(income); break; case "iw_account_log_id": String iwAccountLogId = (String)next3.getData(); accountQueryAccountLogVO.setIwAccountLogId(iwAccountLogId); break; case "merchant_out_order_no": String merchantOutOrderNo = (String)next3.getData(); accountQueryAccountLogVO.setMerchantOutOrderNo(merchantOutOrderNo); break; case "outcome": String outcome = (String)next3.getData(); accountQueryAccountLogVO.setOutcome(outcome); break; case "partner_id": String partnerId = (String)next3.getData(); accountQueryAccountLogVO.setPartnerId(partnerId); break; case "rate": String rate = (String)next3.getData(); accountQueryAccountLogVO.setRate(rate); break; case "seller_account": String sellerAccount = (String)next3.getData(); accountQueryAccountLogVO.setSellerAccount(sellerAccount); break; case "seller_fullname": String seller = (String)next3.getData(); accountQueryAccountLogVO.setSellerAccount(seller); break; case "service_fee": String serviceFee = (String)next3.getData(); accountQueryAccountLogVO.setServiceFee(serviceFee); break; case "sign_product_name": String signProductName = (String)next3.getData(); accountQueryAccountLogVO.setSignProductName(signProductName); break; case "sub_trans_code_msg": String subTransCodeMsg = (String)next3.getData(); accountQueryAccountLogVO.setSubTransCodeMsg(subTransCodeMsg); break; case "total_fee": String totalFee = (String)next3.getData(); accountQueryAccountLogVO.setTotalFee(totalFee); break; case "trade_no": String tradeNo = (String)next3.getData(); accountQueryAccountLogVO.setTradeNo(tradeNo); break; case "trade_refund_amount": String tradeRefundAmount = (String)next3.getData(); accountQueryAccountLogVO.setTradeRefundAmount(tradeRefundAmount); break; case "trans_code_msg": String transCodeMsg = (String)next3.getData(); accountQueryAccountLogVO.setTransCodeMsg(transCodeMsg);; break; case "trans_date": String transDate = (String)next3.getData(); accountQueryAccountLogVO.setTransDate(transDate); break; default: break; } } list.add(accountQueryAccountLogVO); } } } } } catch (DocumentException e) { e.printStackTrace(); } }