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 发布
227

被折叠的 条评论
为什么被折叠?



