All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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