最近在项目中需要每天对交易数据进行对账功能,接口方提供对账接口,但是接口提供的是一个网络地址的zip文件,需要在代码中下载到本地后解压再进行操作,查阅各种资料后写出整套流程,以此记录。
第一步,下载网络文件到本地,返回本地文件地址
/**
* 从网络地址下载文件到本地
* @param url 网络地址文件
* @param dir 本地地址
* @param fileName 文件名
* @return 下载之后的本地文件地址
*/
public String downloadHttpUrl(String url, String dir, String fileName) {
try {
URL httpurl = new URL(url);
File dirfile = new File(dir);
if (!dirfile.exists()) {
dirfile.mkdirs();
}
FileUtils.copyURLToFile(httpurl, new File(dir + fileName));
return dir + fileName;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
第二步,因为下载下来的文件是ZIP包,需要对ZIP包进行解压,推荐Hutool Java工具包 非常好用,里面
还包含了其他非常多便捷工具,地址[Hutool](https://hutool.cn/docs/#/)
/**
* 解压ZIP包
* 第一个参数是本地文件路径
* 第二个参数是解压后的文件路径
*/
ZipUtil.unzip(zipLocalPath,CsvFileConstants.UNZIP_CSV_PATH);
第三步,对解压出来的CSV文件进行操作,处理CSV文件的过程中,可能会出现乱码现象,设置对应编码即可
/**
* 处理csv文件
* @param filePath
* @return
*/
public List<String> readCsv(String filePath) {
File csv = new File(filePath);
csv.setReadable(true);//设置可读
csv.setWritable(true);//设置可写
BufferedReader br = null;
try {
InputStreamReader isr = new InputStreamReader(new FileInputStream(csv), "GBK");
br = new BufferedReader(isr);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
String line = "";
String everyLine = "";
List<String> allString = new ArrayList<>();
try {
while ((line = br.readLine()) != null) // 读取到的内容给line变量
{
everyLine = line;
allString.add(everyLine);
}
} catch (IOException e) {
e.printStackTrace();
}
return allString;
}
最后即可拿到最初ZIP包中的内容,在对拿到的内容做业务处理即可