1.情景
生成多个excle文件,放入一个zip压缩包中,上传到服务器A,再从A复制到B中
2.压缩代码
try{
String zipFilePath = “D/xiazai/opt/下载测试.zip”;
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(new File(zipFilePath)));
File srcFile = new File(filePath);
byte[] buf = new byte[1024];
zos.putNextEntry(new ZipEntry(srcFile.getName()));
int len = false;
FileInputStream in = new FileInputStream(srcFile);
int len;
while((len = in.read(buf)) > -1) {
zos.write(buf, 0, len);
zos.flush();
}
in.close();
zos.closeEntry();
TOCopyB(zipFilePath);//上传到B服务器
TOSendemail();//发送email
}
catch(Exception e){
e.printStackTrace();
}
finally{
if (zos != null) {
try {
zos.finish();
zos.close();
} catch (IOException var19) {
System.out.println("ZipUtil toZip close exception" + var19);
}
}
}
3.异常情况
发送的email附件,在我本地电脑win10 环境,使用360解压缩可以打开zip,再同事电脑Mck上无法打开。
4.问题定位
在A服务器上生成的zip文件拿下来,在所有电脑上都可以打开,在B服务器上的文件拿下来,我本地可以打开,其他人打不开
那么问题发生在文件从A服务器复制到B服务器上产生了问题,导致B生成的ZIP包损坏
5.追代码
TOCopyB(zipFilePath);中,拿新生成的文件去做复制,未做流的关闭
6.解决办法
if (zos != null) {
try {
zos.finish();
zos.close();
} catch (IOException var19) {
System.out.println(“ZipUtil toZip close exception” + var19);
}
}
将上述代码放置在TOCopyB(zipFilePath) 前,保证在A服务器上生成的zip流关闭,再去B服务器上复制,完美解决