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