支付宝对账单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,去我的资源下载即可使用