支付寶對賬單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,去我的資源下載即可使用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章