生成压缩文件时,发现有个大小为0,压缩后大小为2的空文件

迷雾骑士 2020-02-27 10:48:07
如题,详细看截图:


解压出来后,这个空文件又不见了,请问各位大虾:这是个什么情况?怎么解决?

PS:
有的压缩软件打开后是这样,如图:


附上代码片段:

try {
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(strZipPath));
// 需要同时下载的多个文件
// 遍历文件夹,组装文件目录
Set<Integer> keys = folderMap.keySet();
for (Integer key : keys) {
HashMap<String, String> valueItem = folderMap.get(key);
// 绝对路径文件名(格式:/ljzsg/fastdfs/file/data/00/06/wKgD91vHCPuAJdNzAAEn6ED7yKg207.jpg)
String urlPath = valueItem.get("url");
// 全路径文件名(格式:测试\2\2.jpg)
String fullPathName = valueItem.get("fullPathName");

if (FileType.FILE.getValue().toString().equals(valueItem.get("type"))) {// 类型为文件,则打包下载
if (null != urlPath && !"".equals(urlPath)
&& null != fullPathName && !"".equals(fullPathName)) {
//java.io.File f = new java.io.File(absolutePathName);
//FileInputStream fis = new FileInputStream(f);
BufferedInputStream in = dfsClient.downLoad(urlPath);
out.putNextEntry(new ZipEntry(fullPathName));
// 设置压缩文件内的字符编码,不然会变成乱码
out.setEncoding("GBK");
int len;
// 读入需要下载的文件的内容,打包到zip文件
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
out.closeEntry();
in.close();
}

} else if (FileType.DEMAND_FOLDER.getValue().toString().equals(valueItem.get("type"))
|| FileType.DEMAND_REFERENCE_SUB_FOLDER.getValue().toString().equals(valueItem.get("type"))
|| FileType.INTERPOSE_REFERENCE_SUB_FOLDER.getValue().toString().equals(valueItem.get("type"))
|| FileType.VALIDATE_REFERENCE_SUB_FOLDER.getValue().toString().equals(valueItem.get("type"))
|| FileType.OTHER_FOLDER.getValue().toString().equals(valueItem.get("type"))) {// 类型为文件夹,则打包空文件夹
if (null != fullPathName && !"".equals(fullPathName)) {
out.putNextEntry(new ZipEntry(fullPathName + java.io.File.separator));
// 设置压缩文件内的字符编码,不然会变成乱码
out.setEncoding("GBK");
out.closeEntry();
}
}
}
out.close();
logger.info("download start");
logger.info("fileNameNoSufix=" + FileUtil.getFileNameNoEx(filename));
downloadFile(request, response, strZipPath, FileUtil.getFileNameNoEx(filename) + ".zip");
logger.info("download end");
java.io.File temp = new java.io.File(strZipPath);
if (temp.exists()) {
temp.delete();
logger.info("delete zip file.");
}
} catch (Exception e) {
logger.error(ReturnCode.ERR_DOWNLOAD_FAILED + "", e);
}
...全文
4473 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰思雨 2020-10-23
  • 打赏
  • 举报
回复
发现两个问题: 1. 编码应该使用 UTF8 比较好,这个作为文件和目录的名称,比较不容易产生乱码。 2. folderMap.keySet() 返回的集合,里面的内容是无序的,你怎么保证先存储目录,然后存储目录下的文件?试试排过序的效果。
baxiadsy_csdn 2020-10-20
  • 打赏
  • 举报
回复
遇到同样问题 不清楚原因

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧