|
@@ -1,150 +0,0 @@
|
|
-package com.management.platform.util;
|
|
|
|
-
|
|
|
|
-import com.alibaba.excel.util.StringUtils;
|
|
|
|
-import org.slf4j.Logger;
|
|
|
|
-import org.slf4j.LoggerFactory;
|
|
|
|
-
|
|
|
|
-import java.io.*;
|
|
|
|
-import java.util.Enumeration;
|
|
|
|
-import java.util.zip.*;
|
|
|
|
-
|
|
|
|
-/**
|
|
|
|
- * @Description 压缩与解压工具
|
|
|
|
- * @Author yanghanwei
|
|
|
|
- * @Date 18:42 2019-11-20
|
|
|
|
- * @Version v1
|
|
|
|
- **/
|
|
|
|
-public class ZipUtils {
|
|
|
|
-
|
|
|
|
- private static final Logger logger = LoggerFactory.getLogger(ZipUtils.class);
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 压缩 zip
|
|
|
|
- * @param filePath 文件夹 全路径
|
|
|
|
- * @param fileName 文件夹名称
|
|
|
|
- * @param outPath 压缩文件保存路径
|
|
|
|
- */
|
|
|
|
- public static void zipFile(String filePath, String fileName, String outPath) {
|
|
|
|
- logger.info("filePath:{}, fileName:{}, outPath:{}", filePath, fileName, outPath);
|
|
|
|
- try {
|
|
|
|
- //创建Test.zip文件
|
|
|
|
- OutputStream is = new FileOutputStream(outPath);
|
|
|
|
- //检查输出流,采用CRC32算法,保证文件的一致性
|
|
|
|
- CheckedOutputStream cos = new CheckedOutputStream(is, new CRC32());
|
|
|
|
- //创建zip文件的输出流
|
|
|
|
- ZipOutputStream zos = new ZipOutputStream(cos);
|
|
|
|
- //需要压缩的文件或文件夹对象
|
|
|
|
- File file = new File(filePath);
|
|
|
|
- //压缩文件的具体实现函数
|
|
|
|
- zipFilePost(zos,file,filePath,fileName,outPath);
|
|
|
|
- zos.close();
|
|
|
|
- cos.close();
|
|
|
|
- is.close();
|
|
|
|
- System.out.println("压缩完成");
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- logger.error("压缩失败zipFile,Exception:" + e);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * 压缩文件
|
|
|
|
- * @param zos zip文件的输出流
|
|
|
|
- * @param file 需要压缩的文件或文件夹对象
|
|
|
|
- * @param filePath 压缩的文件路径
|
|
|
|
- * @param fileName 需要压缩的文件夹名
|
|
|
|
- * @param outPath 缩完成后保存为Test.zip文件
|
|
|
|
- */
|
|
|
|
- private static void zipFilePost(ZipOutputStream zos, File file, String filePath, String fileName, String outPath){
|
|
|
|
-
|
|
|
|
- try{
|
|
|
|
- String path = file.getPath();
|
|
|
|
- String zosName = "";
|
|
|
|
- if(!StringUtils.isEmpty(path)){
|
|
|
|
- zosName = path.substring(path.indexOf(fileName));
|
|
|
|
- }
|
|
|
|
- File[] files = file.listFiles();
|
|
|
|
- if(file.isDirectory() && files != null && files.length > 0) {
|
|
|
|
- // 创建压缩文件的目录结构
|
|
|
|
- zos.putNextEntry(new ZipEntry(zosName + File.separator));
|
|
|
|
- for(File f : files) {
|
|
|
|
- zipFilePost(zos, f, filePath, fileName, outPath);
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- logger.info("正在压缩文件:{}",file.getName());
|
|
|
|
- // 创建压缩文件
|
|
|
|
- zos.putNextEntry(new ZipEntry(zosName));
|
|
|
|
- // 用字节方式读取源文件
|
|
|
|
- InputStream is = new FileInputStream(file.getPath());
|
|
|
|
- // 创建一个缓存区
|
|
|
|
- BufferedInputStream bis = new BufferedInputStream(is);
|
|
|
|
- // 字节数组,每次读取1024个字节
|
|
|
|
- byte [] b = new byte[1024];
|
|
|
|
- // 循环读取,边读边写
|
|
|
|
- while(bis.read(b)!=-1) {
|
|
|
|
- // 写入压缩文件
|
|
|
|
- zos.write(b);
|
|
|
|
- }
|
|
|
|
- //关闭流
|
|
|
|
- bis.close();
|
|
|
|
- is.close();
|
|
|
|
- }
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- logger.error("压缩文件失败zipFilePost,Exception:" + e);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public static void unzip(String sourcePath, String targetPath) {
|
|
|
|
- //targetPath输出文件路径
|
|
|
|
- File targetFile = new File(targetPath);
|
|
|
|
- // 如果目录不存在,则创建
|
|
|
|
- if (!targetFile.exists()) {
|
|
|
|
- targetFile.mkdirs();
|
|
|
|
- }
|
|
|
|
- //sourcePath压缩包文件路径
|
|
|
|
- try (ZipFile zipFile = new ZipFile(new File(sourcePath))) {
|
|
|
|
- System.out.println("file nums:" + zipFile.size());
|
|
|
|
- Enumeration enumeration = zipFile.entries();
|
|
|
|
- while (enumeration.hasMoreElements()) {
|
|
|
|
- //依次获取压缩包内的文件实体对象
|
|
|
|
- ZipEntry entry = (ZipEntry) enumeration.nextElement();
|
|
|
|
- String name = entry.getName();
|
|
|
|
- if (entry.isDirectory()) {
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- try (BufferedInputStream inputStream = new BufferedInputStream(zipFile.getInputStream(entry))) {
|
|
|
|
- // 需要判断文件所在的目录是否存在,处理压缩包里面有文件夹的情况
|
|
|
|
- String outName = targetPath + "/" + name;
|
|
|
|
- File outFile = new File(outName);
|
|
|
|
- File tempFile = new File(outName.substring(0, outName.lastIndexOf("/")));
|
|
|
|
- if (!tempFile.exists()) {
|
|
|
|
- tempFile.mkdirs();
|
|
|
|
- }
|
|
|
|
- try (BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(outFile))) {
|
|
|
|
- int len;
|
|
|
|
- byte[] buffer = new byte[1024];
|
|
|
|
- while ((len = inputStream.read(buffer)) > 0) {
|
|
|
|
- outputStream.write(buffer, 0, len);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- } catch (Exception e) {
|
|
|
|
- e.printStackTrace();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- public static void main(String[] args) throws Exception{
|
|
|
|
-// String filePath = "/var/folders/88/jh37h0fj59l1f302jdryz4780000gn/T/201908月小微平台消耗-1574300435525/";
|
|
|
|
-// // 需要压缩的文件夹名
|
|
|
|
-// String fileName = "201908月小微平台消耗-1574300435525";
|
|
|
|
-// // 压缩完成后保存为Test.zip文件,名字随意
|
|
|
|
-// String outPath = "/var/folders/88/jh37h0fj59l1f302jdryz4780000gn/T/Test3.zip";
|
|
|
|
-// zipFile(filePath, fileName, outPath);
|
|
|
|
-
|
|
|
|
- String sourcePath = "C:\\gitproject\\manHourHousekeeper\\fhKeeper\\formulahousekeeper\\timesheet-workshop\\distPC.zip";
|
|
|
|
- String targetPath = "C:\\文档资料\\distPC";
|
|
|
|
- unzip(sourcePath, targetPath);
|
|
|
|
- }
|
|
|
|
-}
|
|
|