You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
aggregation-platform/src/com/platform/utils/ZipCompressUtils.java

82 lines
2.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.platform.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import org.apache.log4j.Logger;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
public class ZipCompressUtils {
private static Logger logger = Logger.getLogger(ZipCompressUtils.class);
public static void zip(File inputFile, String zipFileName) {
Properties pro = System.getProperties();
String osName = pro.getProperty("os.name");
if(osName.contains("Linux")||osName.contains("linux")){
ProcessMyUtil.execCmdWaitAcquiescent("zip -r "+ FileOperateHelper.addLastSeparator(Configs.PACKAGE_DOWNLOAD_PATH) +"package.zip " + FileOperateHelper.addLastSeparator(Configs.PACKAGE_DOWNLOAD_PATH) + Configs.PACKAGE_NAME);
}
else if (osName.contains("Windows") || osName.contains("windows")) {
// windows下压缩
try {
// 解决中文文件夹名乱码的问题
FileOutputStream fos = new FileOutputStream(new String(zipFileName));
ZipOutputStream zos = new ZipOutputStream(fos); // 将文件输出流与zip输出流接起来
logger.info("压缩-->开始");
zip(zos, inputFile, "");
logger.info("压缩结束");
zos.close();
} catch (Exception e) {
logger.error(e.getStackTrace());
}
}
else {
logger.error(" The current system is not supported \r\n");
}
}
private static void zip(ZipOutputStream zos, File file, String base) {
try {
// 如果句柄是文件夹
if (file.isDirectory()) {
File[] files = file.listFiles(); // 获取文件夹下的子文件或子目录
zos.putNextEntry(new ZipEntry(base + "/"));
logger.info("目录名:" + file.getName() + "|加入ZIP条目:" + base + "/");
base = (base.length() == 0 ? "" : base + "/");
// 遍历目录下的文件
for (int i = 0; i < files.length; i++) {
// 递归进入本方法
zip(zos, files[i], base + files[i].getName());
}
} else { // 如果句柄是文件
if (base == "")
base = file.getName();
zos.putNextEntry(new ZipEntry(base)); // 填入文件句柄
logger.info("文件名:" + file.getName() + "|加入ZIP条目:" + base);
// 开始压缩
// 从文件入流读,写入ZIP 出流
writeFile(zos, file);
}
} catch (Exception e) {
logger.error(e.getStackTrace());
}
}
private static void writeFile(ZipOutputStream zos, File file)
throws IOException {
logger.info("开始压缩" + file.getName());
FileInputStream fis = new FileInputStream(file);
int len;
while ((len = fis.read()) != -1)
zos.write(len);
logger.info("压缩结束");
fis.close();
}
}