支付宝支付对账单java_[Java]解析支付宝对账单csv

配置相关公钥和私钥

这些需要在支付宝的账户中心配置

2fabe656375f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image.png

这些内容在支付宝平台上都有教程,因为下载对账单这个功能比较简单,不需要入聚石塔

下载对账单

https://docs.open.alipay.com/20180417160701241302/fd3qt1

官方文档写的很清楚,而且能直接用,将配置好的公钥私钥APPID等加入请求之后,就会得到结果,下载对账单可能会出现,没有账单的情况,可以具体看一下,对应的页面上支付宝对账单上有无数据,有的可能真的没有数据,就没有对账单下载地址

解析下载zip

调用正确会有一个下载链接,30s有效,类似如下:

http://dwbillcenter.alipay.com/downloadBillFile.resource?bizType=trade&userId=20885019787822870156&fileType=csv.zip&bizDates=20181212&downloadFileName=20885019787822870156_20181212.csv.zip&fileId=%2Ftrade%2F20885019787822870156%2F20181212.csv.zip&timestamp=1544683667&token=a34f9311ec7dc38ca205f39b6362b408

过了30s,下载链接就没有用了,要立即下载相应的内容

下载的内容是一个csv.zip压缩文件

解压zip文件

/**

* 解压文件zip

* @param zipFile 需要解压文件

* @param descDir 解压完成之后输出的文件夹

* @throws IOException

*/

private void zipDecompressing(File zipFile, String descDir)throws IOException {

try {

Charset gbk = Charset.forName("gbk");

ZipInputStream Zin=new ZipInputStream(new FileInputStream(zipFile),gbk);//输入源zip路径

BufferedInputStream Bin=new BufferedInputStream(Zin);

String Parent=descDir; //输出路径(文件夹目录)

File Fout=null;

ZipEntry entry;

try {

while((entry = Zin.getNextEntry())!=null && !entry.isDirectory()){

Fout=new File(Parent,entry.getName());

if(!Fout.exists()){

(new File(Fout.getParent())).mkdirs();

}

FileOutputStream out=new FileOutputStream(Fout);

BufferedOutputStream Bout=new BufferedOutputStream(out);

int b;

while((b=Bin.read())!=-1){

Bout.write(b);

}

Bout.close();

out.close();

System.out.println(Fout+"解压成功");

}

Bin.close();

Zin.close();

} catch (IOException e) {

e.printStackTrace();

}

} catch (FileNotFoundException e) {

e.printStackTrace();

}

}

/**

* 按顺序关闭流

*/

private void closeStream(BufferedReader bufferedReader, InputStreamReader inputStreamReader, InputStream inputStream) {

try {

if (bufferedReader != null) {

bufferedReader.close();

}

} catch (IOException e) {

e.printStackTrace();

}

if (inputStreamReader != null) {

try {

inputStreamReader.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if (inputStream != null) {

try {

inputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

解压完成之后,就会有两个文件,一个汇总,一个详细

下面解析csv文件,

csv文件,可以理解为txt文件,之前用解析Excel的方式报错

String path = "F:/AlipayFile";//存放文件的目录

String fileName = "20885019787822870156_20181026.csv.zip";//原来的解压文件

String csvName="";

String name = fileName.split("\\.")[0];

File fileDir = new File("F:/AlipayFile");

File[] tempList = fileDir.listFiles();

for (int i = 0; i < tempList.length; i++) {

if (tempList[i].getName().contains(name)&&!tempList[i].getName().contains("汇总")&&!tempList[i].getName().contains("zip")) {

System.out.println(tempList[i].getName());

csvName = tempList[i].getName();

}

}

File excel = new File(path + "/" + csvName);

Charset gbk = Charset.forName("gbk");

InputStreamReader inputStreamReader = null;

InputStream fiStream = null;

BufferedReader br = null;

//行文件中所有数据

List dataList = new ArrayList<>();

//暂时存放每一行的数据

String rowRecord = "";

try {

fiStream = new FileInputStream(excel); //文件流对象

inputStreamReader = new InputStreamReader(fiStream, Charset.forName("GBK"));

br = new BufferedReader(inputStreamReader);

while ((rowRecord = br.readLine()) != null) {

String[] lineList = rowRecord.split("\\,");

if (lineList.length > 4) {

dataList.add(lineList);

}

}

} catch (Exception e) {

e.printStackTrace();

} finally {

closeStream(br, inputStreamReader, fiStream);

}

System.out.println(dataList);

我将行数内容大于4的有效条目存到list中,后面怎么操作都是自己的事情了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/530558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cmd编译java文件中文乱码_乱码 HelloWorld 世界你好 cmd 执行输出的中文java 显示乱码 解决 另附 win无法执行编译运行javac java编译文件的解决方案...

【博客园cnblogs笔者m-yb原创&#xff0c;转载请加本文博客链接&#xff0c;笔者公众号aandb7 爱码一生&#xff0c;QQ群927113708, github: https://github.com/mayangbo666】这是一篇java入门:java是众多编程语言之一, 就是开发的工具技术, 没什么特别, 是应用广, 严谨的语言…

java linux获取实时cpu_用java取得linux系统cpu、内存的实时信息(参考别人代码)...

/**   * cat /proc/cpuinfo - cpu (i.e. vendor, mhz, flags like mmx) * cat /proc/interrupts - 中断   * cat /proc/ioports - 设备io端口   * cat /proc/meminfo - 内存信息(i.e. mem used, free, swap size)   * cat /proc/partitions - …

自我学习--关于如何设计光耦电路

本人在项目中多次设计光耦电路&#xff0c;目前电路在项目中运行比较平稳&#xff0c;所以总结一下自己的设计经验&#xff0c;与大家交流一下&#xff0c;如有错误还希望大家指出改正&#xff0c;谢谢&#xff08;V&#xff1a;Smt15921588263&#xff1b;愿与大家多交流&…

java 读取 xmltype_java操作XMLType的几种方法

XMLType是oracle数据库特有的数据类型可以用来存储一段xml,通过java(本文使用jdbc)插入XMLType根据sql中参数的类型通常有以下3种方法:本文使用的数据库为oracle10.2.1一、String,客户端只需传递一个字符串参数,创建xmltype的任务完全交给数据库,此方法数据库的压力最大String …

java运算符优先级举例_列举出java运算符的优先级

展开全部优先级 操作符 含义 关联性32313133353236313431303231363533e59b9ee7ad9431333337613833 用法----------------------------------------------------------------1 [ ] 数组下标 左 array_name[expr]. 成员选择 左 o…

java websocket ie8_websocket兼容IE8

最近由于项目需要做实时聊天功能&#xff0c;选择了html5的websocket方案(事实上node.jssocket.io兼容性更好&#xff0c;个人觉得这个方案更加完美)&#xff0c;websocket实现实时聊天的demo网上很多&#xff0c;但是兼容IE8的资料却很少&#xff0c;这块折腾了很久。websoket…

java newfile() bug_java初学者小白?遇到BUG就慌了?有关java异常的十大问题详解!...

1.已检查与未检查简而言之&#xff0c;必须在方法中显式捕获已检查的异常&#xff0c;或在方法的throws子句中声明该异常。未检查的异常是由无法解决的问题引起的&#xff0c;例如被零除&#xff0c;空指针等。检查的异常特别重要&#xff0c;因为您希望使用API的其他开发人员知…

java 日期操作工具类_java8操作日期的工具类

java8操作日期的工具类一、方法概览该包的API提供了大量相关的方法&#xff0c;这些方法一般有一致的方法前缀&#xff1a;of&#xff1a;静态工厂方法。parse&#xff1a;静态工厂方法&#xff0c;关注于解析。get&#xff1a;获取某些东西的值。is&#xff1a;检查某些东西的…

mysql拦截器实现crud_Mybatis自定义SQL拦截器

本博客介绍的是继承Mybatis提供的Interface接口&#xff0c;自定义拦截器&#xff0c;然后将项目中的sql拦截一下&#xff0c;打印到控制台。先自定义一个拦截器package com.muses.taoshop.common.core.database.config;import org.apache.commons.lang3.StringUtils;import or…

python 桌面提醒_使用Python获取桌面通知

开发一款可提醒您诸如警报或待办事项清单等计划的应用程序真是太好了。在本文中&#xff0c;我将引导您逐步编写如何使用Python获取桌面通知的程序。桌面通知应用程序如何工作&#xff1f;您今天将要学习开发的桌面通知应用程序的主要目的是不断提醒我们我们一天中需要完成的不…

java线程同步的实现_【Java多线程系列三】实现线程同步的方法

packagecom.concurrent.test;importjava.util.Stack;importjava.util.concurrent.ArrayBlockingQueue;importjava.util.concurrent.BlockingQueue;importjava.util.concurrent.locks.Condition;importjava.util.concurrent.locks.ReentrantLock;/*** Description: 三种方法实现…

python建立py文件夹过程_Pycharm创建python文件自动添加日期作者等信息(步骤详解)...

百度AI接口的调用方法不必多介绍。官网地址 人流量统计新建AipBodyAnalysisfrom aip import AipBodyAnalysis""" 你的 APPID AK SK """APP_ID 你的 App IDAPI_KEY 你2021-02-03 14:24:01本文主要介绍了在python3.9下如何安装scrapy的方法&…

python父亲节祝福_父亲节祝福语精选简短 父亲节祝福语简短独特

1.您的坚忍不拔和铮铮硬骨是我的榜样&#xff0c;我从您那儿汲取到奋发的力量&#xff0c;走过挫折&#xff0c;迈向成功&#xff0c;爸爸&#xff0c;您是我永远的榜样&#xff0c;我爱您&#xff01;祝您节日快乐&#xff01;2.您的怀抱&#xff0c;是我的小天地&#xff1b;…

redis java应用_redis在JAVA的简单应用

reids是一个高性能的key-value数据库。它存储的value支持各种类型的数据&#xff0c;如String,List&#xff0c;set&#xff0c;hash类型。在此基础上&#xff0c;各种不同方式的排序。本文不具体争对redis数据库的各种命令&#xff0c;而是在Java实现简单的调用。1. //初始化R…

java安装 hello_安装JAVA步骤,并编写HELLOWORLD程序

安装Java步骤&#xff0c;并编写helloworld程序1.安装JDK(Java Development Kit)JDK是Java开发工具包(Java Development Kit)的缩写。它是一种用于构建在J Java 平台上发布的应用程序、applet和组件的开发环境。即编写Java程序必须有JDK&#xff0c;它提供了编译Java和运行Java…

java实现Fmeasure计算_聚类结果的评估指标及其JAVA实现

一. 前言又GET了一项技能。在做聚类算法的时候&#xff0c;由于要评估所提出的聚类算法的好坏&#xff0c;于是需要与一些已知的算法对比&#xff0c;或者用一些人工标注的标签来比较&#xff0c;于是用到了聚类结果的评估指标。我了解了以下几项。TP:是指被聚在一类的两个量被…

java随机产生坐标点_刚学JAVA不久,问一下怎么把这个程序实现随机啊,不是按照坐标...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼int i;int z0;int j,h0,k0;int AppletWidch,AppletHeight,currentImage;Image Animation[],SerialImage,OffScreen;Thread newThread;Graphics drawOffScreen;MediaTracker MT;ImageProducer Source;CropImageFilter CutImage;publ…

ubuntu安装java的rpm_ubuntu安装jdk-6u45-linux-x64-rpm.bin

1、参考网址&#xff1a;ZC: 网页内容保存于 “百度云 CodeSkill33 --> 全部文件 >来自网页 > Linux > ubuntu > ubuntu安装jdk-6u45-linux-x64-rpm.bin__Work_20160115_0851.rar”2、(1)、我是将jdk-6u45-linux-x64.bin放在 "/home"下的(2)、命令&qu…

java窗体容器坐标_Java的屏幕坐标是以像素为单位的,容器的左下角被确定为坐标的起点。...

屏单位的的左定为的起点Despite ________ difficulties, they did not find the life in London unpleasant.幕坐As soon as I was ____________, I began to have second thoughts about leaving.标被确The girl was uncertain what to do, or what tone of voice to_________…

mysql 相同字段相减_mysql datetime 类型字段相减

背景&#xff1a;今天测试一个mariadb中datatime类型的字段相减问题&#xff0c;直接用2个字段相减得到的数值并不是秒&#xff0c;很坑。后面百度了一些方法&#xff0c;说是使用 DateDiff 函数&#xff0c;这个函数文档还说有3个参数&#xff0c;但是3个参数运行是报错的。要…