
club.zhcs.utils.ZipUtils Maven / Gradle / Ivy
package club.zhcs.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import org.nutz.lang.Lang;
import org.nutz.lang.Strings;
import lombok.experimental.UtilityClass;
@UtilityClass
public class ZipUtils {
private static void zipFile(ZipOutputStream zipOutputStream, File file, String parentFileName) {
try (FileInputStream in = new FileInputStream(file)) {
ZipEntry zipEntry = new ZipEntry(parentFileName + File.separator + file.getName());
zipOutputStream.putNextEntry(zipEntry);
int len;
byte[] buf = new byte[8 * 1024];
while ((len = in.read(buf)) != -1) {
zipOutputStream.write(buf, 0, len);
}
zipOutputStream.closeEntry();
} catch (Exception e) {
throw Lang.wrapThrow(e);
}
}
/**
* 递归压缩目录结构
*
* @param zipOutputStream
* @param file
* @param parentFileName
*/
private static void directory(ZipOutputStream zipOutputStream, File file, String parentFileName) {
File[] files = file.listFiles();
String parentFileNameTemp = null;
for (File fileTemp : files) {
parentFileNameTemp = Strings.isEmpty(parentFileName) ? fileTemp.getName()
: parentFileName + File.separator + fileTemp.getName();
if (fileTemp.isDirectory()) {
directory(zipOutputStream, fileTemp, parentFileNameTemp);
} else {
zipFile(zipOutputStream, fileTemp, parentFileName);
}
}
}
/**
* 压缩文件目录
*
* @param source 源文件目录(单个文件和多层目录)
* @param destit 目标文件
*/
public static void zipFiles(String source, String destit) {
File file = new File(source);
try (FileOutputStream fileOutputStream = new FileOutputStream(destit);
ZipOutputStream zipOutputStream = new ZipOutputStream(fileOutputStream);) {
if (file.isDirectory()) {
directory(zipOutputStream, file, "");
} else {
zipFile(zipOutputStream, file, "");
}
} catch (Exception e) {
throw Lang.wrapThrow(e);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy