通过url下载zip对账单文件,进行解压,读取压缩文件内容。

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader; import java.net.URL;
import java.net.URLConnection; import java.text.SimpleDateFormat; import java.util.Date; import com.alipay.downOrdession.*;//修改zip源码包 public class Zip2String { public static void main(String[] args) throws Exception {
String alipay_url =
"http://dwbillcenter.alipay.com/downloadBillFile.resource?bizType=trade&userId=20889117596609430156&fileType=csv.zip&bizDates=20170628&downloadFileName=20889117596609430156_20170628.csv.zip&fileId=%2Ftrade%2F20889117596609430156%2F20170628.csv.zip&timestamp=1499075857&token=fdcd1fa66d4270ff19f727db0db7af70";
String filename=getDownloadFileName(alipay_url); String down_url = "d:\\test\\ceshi123\\"+filename+".zip";
/*
* 通过调用支付宝接口返回的url下载zip文件
*/
boolean down_success = downLoadZip(alipay_url,down_url);
String connetall = ""; //true or false 下载成功,调用解压方法
if(down_success){
File save_down_url = new File(down_url);
/*
* 解压下载的zip文件
*/
// String unzipFilePath = comZipCvsFile(save_down_url); /*
* 读取下载的zip文件,返回一个string字符串
*/
connetall = readZipToString(save_down_url);
}
/* 返回结果
* 1.false,下载失败
* 2.空字符串||"false"。解压或者读取转string失败
*/
//return connetall;
} /**
* 通过支付宝查询对账单接口返回的url,下载zip文件
* @param alipay_url
* @param down_url
* @return
*/
public static boolean downLoadZip(String alipay_url,String down_url) {
boolean down_success = false;
int bytesum = 0;
int byteread = 0;
Date date = new Date();
SimpleDateFormat sf = new SimpleDateFormat("yyyy/MM/dd");
String dateFloder = sf.format(date); InputStream inStream = null;
FileOutputStream fs = null; try { URL url = new URL(alipay_url);
URLConnection conn = url.openConnection();
inStream = conn.getInputStream(); //自定义文件保存地址
String unzipFilePath = down_url.substring(0, down_url.lastIndexOf("\\"));//判断下载保存路径文件夹 File unzipFileDir = new File(unzipFilePath);//下载文件存放地址
if (!unzipFileDir.exists() || !unzipFileDir.isDirectory()) {
unzipFileDir.mkdirs();
}
//解压文件是否已存在
File entryFile = new File(down_url);
if (entryFile.exists()) {
//删除已存在的目标文件
entryFile.delete();
} fs = new FileOutputStream(down_url); byte[] buffer = new byte[4028]; while ((byteread = inStream.read(buffer)) != -1) {
bytesum += byteread;
fs.write(buffer, 0, byteread);
}
down_success = true;
System.out.println(dateFloder+"文件下载成功.....");
} catch (Exception e) {
System.out.println(dateFloder+"文件下载失敗" + e); return false;
} finally {
try {
if (inStream != null) {
inStream.close();
}
} catch (IOException e) {
inStream = null;
} try {
if (fs != null) {
fs.close();
}
} catch (IOException e) {
fs = null;
}
}
return down_success;
} /**
* 读取zip文件,不解压缩直接解析,支持文件名中文,解决内容乱码
* @param file
* @return 读取zip文件,返回字符串
* @throws Exception
*/
@SuppressWarnings("unchecked")
public static String readZipToString(File file) throws Exception {
String connet = "";
try { //获得输入流,文件为zip格式,
//支付宝提供
//20886126836996110156_20160906.csv.zip内包含
//20886126836996110156_20160906_业务明细.csv
//20886126836996110156_20160906_业务明细(汇总).csv
ZipInputStream in = new ZipInputStream(new FileInputStream(file));
//不解压直接读取,加上gbk解决乱码问题
BufferedReader br = new BufferedReader(new InputStreamReader(in,"gbk"));
ZipEntry zipFile;
//返回的字符串---每个文件内容相加
BufferedWriter bw = null;
//循环读取zip中的cvs文件,无法使用jdk自带,因为文件名中有中文
while ((zipFile=in.getNextEntry())!=null) {
if (zipFile.isDirectory()){
//如果是目录,不处理
}
String file_connet = "";
//获得cvs名字
String fileName = zipFile.getName();
System.out.println("-----"+fileName);
//检测文件是否存在
if (fileName != null && fileName.indexOf(".") != -1) {
String line;
/*
* 1.每一行用 | 隔开
* 2.每一个文件用 ; 隔开
*/
// bw = new BufferedWriter(new FileWriter("d:\\test\\test.txt")); //测试读取内容
while ((line = br.readLine()) != null) { file_connet = file_connet + "|" + line;
// System.out.println(line); }
} connet = connet + file_connet + ";";
}
// bw.write(connet);
//关闭流
// bw.close();
br.close();
in.close(); } catch (Exception e) {
System.out.println("zip文件读取失敗" + e); return "false";
} return connet;
} /**解压缩
* 解压通过url获得对账单数据流(.zip)
* @param file //zip文件存放地址
* @return
*/
@SuppressWarnings("unchecked")
public static String comZipCvsFile(File file) throws Exception {
//自定义文件保存地址
String unzipFilePath = file.getCanonicalPath();
unzipFilePath = unzipFilePath.substring(0, unzipFilePath.lastIndexOf("."));
System.out.println("解压后文件保存路径:"+unzipFilePath); //获得输入流,文件为zip格式,
//支付宝提供
//20886126836996110156_20160906.csv.zip内包含
//20886126836996110156_20160906_业务明细.csv
//20886126836996110156_20160906_业务明细(汇总).csv
ZipInputStream in = new ZipInputStream(new FileInputStream(file)); ZipInputStream zin = new ZipInputStream(in);
ZipEntry zipFile;
BufferedOutputStream bos = null;
try { zin = new ZipInputStream(new FileInputStream(file)); while ((zipFile = zin.getNextEntry()) != null) {
System.out.println(zipFile.getName()); File target = new File(file.getParent(), zipFile.getName()); if (!target.getParentFile().exists()) {
// 创建文件父目录
target.getParentFile().mkdirs();
} //创建解压缩文件保存的路径 文件夹
File unzipFileDir = new File(unzipFilePath);//解压文件存放地址---unzipFilePath(解压文件去吃.zip)
if (!unzipFileDir.exists() || !unzipFileDir.isDirectory()) {
unzipFileDir.mkdirs();
} String file_Name_csv = target.getName();
String entryFilePath = unzipFilePath + File.separator + file_Name_csv;//decom_Path(存放地址)+文件名 //解压文件是否已存在
File entryFile = new File(entryFilePath);
if (entryFile.exists()) {
//删除已存在的目标文件
entryFile.delete();
} /*
* 写入文件
*/
// bos = new BufferedOutputStream(new FileOutputStream(target));//解压到和zip在同一个文件夹
bos = new BufferedOutputStream(new FileOutputStream(entryFile));//自定义文件夹 int read = 0;
byte[] buffer = new byte[1024 * 10]; while ((read = zin.read(buffer, 0, buffer.length)) != -1) {
bos.write(buffer, 0, read);
} bos.flush();
}
//关闭流
zin.close();
bos.close(); } catch (Exception e) {
// TODO: handle exception
System.out.println("zip文件解压失敗" + e); return "false";
}
return unzipFilePath;//返回解压文件保存路径 } /**
* 通过alipay_url获取下载的文件名称
* @param alipay_url
* @return
*/
private static String getDownloadFileName(String alipay_url){
String tempStr = alipay_url.substring(alipay_url.indexOf("downloadFileName")+17, alipay_url.length());
tempStr = tempStr.substring(0,tempStr.indexOf(".zip"));
return tempStr;
} }

支付宝(查询对账单下载地址(alipay.data.dataservice.bill.downloadurl.query))的更多相关文章

  1. iOS app支付宝接口调用的一点总结(补充支付宝SDK&Demo下载地址)

    由于app内需要用到支付功能,选择了当前最流行的支付宝进行支付.在进行内嵌支付宝功能开发时,被它狠狠的耍了一把. 根据支付宝开发文档,参考demo代码.将相关支付功能加到了自己的代码中.一些根据文档来 ...

  2. 转:iOS app支付宝接口调用的一点总结(补充支付宝SDK&Demo下载地址)

    iosiOSIOS文档服务器测试电话 由于app内需要用到支付功能,选择了当前最流行的支付宝进行支付.在进行内嵌支付宝功能开发时,被它狠狠的耍了一把. 根据支付宝开发文档,参考demo代码.将相关支付 ...

  3. 支付宝对账单下载Java正式商户调用

    package code; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; impo ...

  4. 支付宝对账单下载Java沙箱调用

    package code; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; impo ...

  5. CentOS6.6系统源代码安装mysql5.5.28教程(附源码包下载地址)+sysbench的安装

    mysql从5.5版本开始,不再使用./configure编译,而是使用cmake编译器,具体的cmake编译参数可以参考mysql官网文档(※ 非常重要) http://dev.mysql.com/ ...

  6. BAT等大厂已开源的70个实用工具盘点(附下载地址)

    前面的一篇文章<微软.谷歌.亚马逊.Facebook等硅谷大厂91个开源软件盘点(附下载地址)>列举了国外8个互联网公司(包括微软.Google.亚马逊.IBM.Facebook.Twit ...

  7. 爬虫所需要的文档和自动化文本driver下载地址,以及制作词云的文档,api等

    Scrapy1.7.3文档 webdriver文档 webdriver下载地址 Chrom各版本下载地址 词云1.5文档 selenium中文文档 vue数据可视化文档 element开发组件 其他好 ...

  8. Jexus Web Server 完全傻瓜化图文配置教程(基于Ubuntu 12.04.3 64位)[内含Hyper-v 2012虚拟机镜像下载地址]

    1. 前言 近日有感许多新朋友想尝试使用Jexus,不过绝大多数都困惑徘徊在Linux如何安装啊,如何编译Mono啊,如何配置Jexus啊...等等基础问题,于是昨日向宇内流云兄提议,不如搞几个配置好 ...

  9. ArcGIS10.2.1精简版、ArcGIS_Desktop10_Tutorial、破解文件等下载地址

    原版ArcGIS for Desktop的ISO文件一般都在4.5G以上,一般人用不上里面很多工具,下载回来又浪费时间,现推出ArcGIS10.2.1精简版(里面只包含主程序.Data Interop ...

随机推荐

  1. vue-axios

    vue axios全攻略   不再继续维护vue-resource,并推荐大家使用 axios 开始,axios 被越来越多的人所了解.本来想在网上找找详细攻略,突然发现,axios 的官方文档本身就 ...

  2. Spring基础2

    一.Spring属性注入 1)构造方法属性注入 2)set方法属性注入:通过在bean对象所属类中提供相应字段的set方法,并在配置文件中配置<property.....> <bea ...

  3. 【blog】SpringMVC返回RSS格式的XML数据

    代码 import com.sun.syndication.feed.rss.Channel; import com.sun.syndication.feed.rss.Content; import ...

  4. 【mmall】IDEA中Service层无法识别Mapper,但是代码通过问题

    解决方案

  5. (4)java数据结构--集合类及其数据结构归纳-有大图

    Java集合类及其数据结构归纳 - s小小的我 - 博客园http://www.cnblogs.com/shidejia/p/6433788.html ---------大图可以 在新标签中打开图片 ...

  6. stega -- Pcat老入群题

    stega -- Pcat老入群题 Pcat师傅的题果然给力,就是看着wp也是琢磨了半天. WP地址:http://mp.weixin.qq.com/s/T9jJLACiZNB6FR226IjmEA ...

  7. Hibernate Transformers之三种结果转换说明

    在hibernate使用的过程中,我们通常需要对结果进行解释.Hibernate为我们提供了以下3种查询结果解释方法: Transformers.ALIAS_TO_ENTITY_MAP //把输出结果 ...

  8. oracle查询语句 select a||','||b||','||c from table where a in('m','n')

    查询table表中 字段a = m 或 n 时,a列,b列,c列的值,并且这三列之间用 ","(逗号)分割. 追问:连接符的作用呢?就是显示的时候链接abc和中间的逗号么?追答:| ...

  9. GeoDesc: Learning Local Descriptors by Integrating Geometry Constraints

    这篇论文提出了一种新的局部描述子学习方法,有一些点值得学习,记录下来以供参考.文章中涉及了一些3D reconstruction.structure from 的知识,不是很了解,所以理解可能有偏颇. ...

  10. mysql 二进包在linux下安装过程

    cp mysql-5.6.17-linux-glibc2.5-i686 /usr/local/mysql -r groupadd mysql和useradd -r -g mysql mysql 进入安 ...