支付宝对账单CSV解析

支付宝对账单CSV解析

一、读取zip文件,不解压缩直接解析,支持文件名中文,解决内容乱码

import com.slx.outer.zip.ZipEntry;
import com.slx.outer.zip.ZipInputStream;
import org.junit.Test;

import java.io.*;


/**
 * @Author: slx
 * @Date: 2019/5/16 22:01
 */
public class AAA {

    @Test
    public  void test() throws Exception {

        analyticalCSV();
    }

    @SuppressWarnings("unchecked")
    public static  String readZipToString(File file) throws Exception {
        String connet = "";
        try {
            //获得输入流,文件为zip格式,
            //支付宝提供
            //20880118962613210156_20190514.csv.zip内包含
            //20880118962613210156_20190514_业务明细.csv
            //20880118962613210156_20190514_业务明细(汇总).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.每一个文件用 ; 隔开
                     */
                    while ((line = br.readLine()) != null) {
                        file_connet = file_connet + "||" + 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;
    }

    public  void analyticalCSV() throws Exception {

        File file = new File("D:\\demo\\20880118962613210156_20190514.csv.zip");

        /*
         * 通过调用支付宝接口返回的url下载zip文件
         */
        boolean down_success = true;
        String connetall = "";

        //true or  false 下载成功,调用解压方法
        if(down_success){
            File save_down_url = file;
            /*
             * 解压下载的zip文件
             */
//            String unzipFilePath = comZipCvsFile(save_down_url);

            /*
             * 读取下载的zip文件,返回一个string字符串
             */
            connetall = readZipToString(save_down_url);
        }
        /* 返回结果
         * 1.false,下载失败
         * 2.空字符串||"false"。解压或者读取转string失败
         */
        System.out.println(connetall);
    }

}

注意:其中ZipEntry和ZipInputStream使用JDK自带的会报错,这里提供shupushUtil,去我的资源下载即可使用

你可能感兴趣的:(工作笔记)