zoukankan      html  css  js  c++  java
  • 通过调用支付宝查询对账单接口返回bill_download_url下载zip,解压缩

    通过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;  
        }
        
    }
    

    百度网盘下载地址   http://pan.baidu.com/s/1jHRSaUU

  • 相关阅读:
    java IO
    免费的编程中文书籍索引-转
    js两种定义函数、继承方式及区别
    为什么这样写js:(function ($) { })(jQuery);
    Cannot open connection 解决办法
    dos下mysql登陆
    spring-AOP-1
    el表达式
    设计模式——"simple Factory"
    软件生产性控制
  • 原文地址:https://www.cnblogs.com/wusx/p/7112487.html
Copyright © 2011-2022 走看看