package io.renren.modules.email.utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.util.Map; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class ZipCompressUtil { private static final Logger logger = LoggerFactory.getLogger(ZipCompressUtil.class); static final int BUFFER = 4096; //map key:文件名 value:文件路径 public static byte[] compress(Map<String, String> map) { ZipOutputStream out = null; try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); out = new ZipOutputStream(baos); String basedir = ""; for (String fileName : map.keySet()) { logger.info("压缩文件路径:{},压缩文件名称:{}", map.get(fileName), fileName); compressFile(new File(map.get(fileName)), fileName, out, basedir); } out.close(); return baos.toByteArray(); } catch (Exception e) { throw new RuntimeException(e); } } private static void compress(File file, ZipOutputStream out, String basedir) { /* 判断是目录还是文件 */ if (file.isDirectory()) { compressDirectory(file, out, basedir); } else { compressFile(file, file.getName(), out, basedir); } } /** * 压缩一个目录 */ private static void compressDirectory(File dir, ZipOutputStream out, String basedir) { if (!dir.exists()) { return; } File[] files = dir.listFiles(); for (int i = 0; i < files.length; i++) { /* 递归 */ compress(files[i], out, basedir + dir.getName() + "/"); } } /** * 压缩一个文件 */ private static void compressFile(File file, String fileName, ZipOutputStream out, String basedir) { if (!file.exists()) { return; } try { BufferedInputStream bis = new BufferedInputStream( new FileInputStream(file)); ZipEntry entry = new ZipEntry(basedir + fileName); out.putNextEntry(entry); int count; byte data[] = new byte[BUFFER]; while ((count = bis.read(data, 0, BUFFER)) != -1) { out.write(data, 0, count); } out.closeEntry(); bis.close(); } catch (Exception e) { logger.error(e.toString(), e); throw new RuntimeException(e); } } }
将文件压缩为字节数组
最新推荐文章于 2024-06-21 17:19:33 发布