这里我们定义一个压缩包元素实体,压缩包名称只是为了业务中传输方便 参数只有一个file 就是你要压缩的文件。 public class ZipAllEntity { File file; ZipEntry entity; String zipName; public File getFile() { return file; } public void setFile(File file) { this.file = file; } public ZipEntry getEntity() { return entity; } public void setEntity(ZipEntry entity) { this.entity = entity; } public String getZipName() { return zipName; } public void setZipName(String zipName) { this.zipName = zipName; } public void setEntity(File file) { this.entity = new ZipEntry(file.getName()); } @Override public String toString() { final StringBuffer sb = new StringBuffer("ZipEntity{"); sb.append("file=").append(file); sb.append(", entity=").append(entity); sb.append(", zipName='").append(zipName).append('\''); sb.append('}'); return sb.toString(); } }
/** * 获取Zip实体对象 * @param taskId * @param zipName * @return */ @Override public List<ZipAllEntity> getZip(String taskId, String zipName) { TbsFileDTO tbsFileDTO = new TbsFileDTO(); tbsFileDTO.setTaskId(taskId); //这里我们去数据库查询要被压缩的文件 List<TbsFileDTO> list=------------ ArrayList<ZipAllEntity> ziplist=new ArrayList<ZipAllEntity>(); for (TbsFileDTO tbs:list ) { File file=new File(FtpClientUtil.getPath() + "/"+ tbs.getFileUrl()) ; ZipAllEntity entity=new ZipAllEntity(); entity.setZipName(StringUtil.isEmpty(zipName)?tbs.getStrExt01():zipName); entity.setFile(file); entity.setEntity(file); ziplist.add(entity); } return ziplist; }
/** * 压缩包写入 * @param list 封装好的集合 * @param out 要写入哪个流 写本地文件就穿本地流 传web端就写 */ public static void write(List<ZipAllEntity> list , OutputStream out){ FileInputStream fis = null; BufferedInputStream bis = null; java.util.zip.ZipOutputStream zos = new java.util.zip.ZipOutputStream(new BufferedOutputStream(out)); try { byte[] bufs = new byte[1024 * 10]; for (ZipAllEntity all:list ) { zos.putNextEntry(all.getEntity()); fis = new FileInputStream(all.getFile()); bis = new BufferedInputStream(fis, 1024 * 10); int read = 0; while ((read = bis.read(bufs, 0, 1024 * 10)) != -1) { zos.write(bufs, 0, read); } } zos.flush(); }catch (Exception e){ logger.error(e.getMessage()); }finally { try { if (null != bis) { bis.close(); } if (null != zos) { zos.close(); } if (null != fis) { fis.close(); } if (null != out) { out.close(); } }catch (Exception e){ } }