需求是这样的,将二维码打包成zip压缩包在本地导出,二维码要根据地市、区县的信息来用文件夹分别保存。 于是我就想用递归来创建文件夹,再将文件夹递归读进zip的输出流中,实在是太笨了。
原来直接可以在二维码文件名称加上 “文件夹名字/” 就可以生成文件夹了, 也不需要递归读进zip的输出流了。
byte[] qrcodeBytes = FileStoreUtils.getStoreService().downloadFile(imgShareLinkDTO.getImgQcodeFileId());//获取二维码字节流
if (qrcodeBytes != null) {
// 写入二维码
String filename = generateQrCodeFilename(machinePanChannelDTO, phoneNumber);
zos.putNextEntry(new ZipEntry(filename));
IOUtils.write(qrcodeBytes, zos);
}
/**
* 生成二维码文件名
*
* 文件名包含多级路径,格式为 地市/区县/承包单元/代理商编码-代理商名称/手机号.png
*/
private String generateQrCodeFilename(MachinePanChannelDTO dto, String phoneNumber) {
StringBuilder sb = new StringBuilder();
// 地市
if (dto.getLanId() == null) {
sb.append("其它/");
} else {
String cityName = attrValueCache.getUnchecked(Pair.of("DC_CITY_CODE", dto.getLanId().toString()));
sb.append(StringUtils.defaultIfEmpty(cityName, "其它")).append("/");
}
// 区县
if (dto.getAreaId() == null) {
sb.append("其它/");
} else {
String areaName = attrValueCache.getUnchecked(Pair.of("DC_AREA_CODE", dto.getAreaId().toString()));
sb.append(StringUtils.defaultIfEmpty(areaName, "其它")).append("/");
}
// 承包单元
sb.append(StringUtils.defaultIfEmpty(dto.getToUnit(), "其它")).append("/");
// 代理商
sb.append(StringUtils.defaultIfEmpty(dto.getAgentCode(), "其它"))
.append("-")
.append(StringUtils.defaultIfEmpty(dto.getAgentName(), "其它"))
.append("/");
// 手机号
sb.append(phoneNumber);
sb.append(".png");
return sb.toString();
}