zoukankan      html  css  js  c++  java
  • java zip 打包

    package com.sxmd.utils;
    
    import com.sxmd.exception.SxmdException;
    import lombok.extern.slf4j.Slf4j;
    
    import java.io.*;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;
    
    /**
     * Description:  打包工具类
     *
     * @author cy
     * @date 2019年07月30日 21:15
     * version 1.0
     */
    @Slf4j
    public class ZipUtil {
    
        private ZipUtil() {
        }
    
        /**
         * 创建ZIP文件
         * @param sourcePath 文件或文件夹路径
         * @param zipPath 生成的zip文件存在路径(包括文件名)
         * @param isDrop  是否删除原文件:true删除、false不删除
         */
        public static boolean createZip(String sourcePath, String zipPath,Boolean isDrop) {
            boolean flag = true;
            FileOutputStream fos = null;
            ZipOutputStream zos = null;
            try {
                fos = new FileOutputStream(zipPath);
                zos = new ZipOutputStream(fos);
                writeZip(new File(sourcePath), "", zos,isDrop);
            } catch (Exception e) {
                flag = false;
                log.error("创建ZIP文件失败",e);
            } finally {
                try {
                    if (zos != null) {
                        zos.close();
                    }
                } catch (IOException e) {
                    log.error("流关闭失败",e);
                }
    
            }
            return flag;
        }
        /**
         * 清空文件和文件目录
         *
         * @param f
         */
        public static void clean(File f)  {
            String[] cs = f.list();
            if (cs == null || cs.length <= 0) {
                log.debug("delFile:[ " + f + " ]");
                boolean isDelete = f.delete();
                if (!isDelete) {
                    log.error("delFile:[ " + f.getName() + "文件删除失败!" + " ]");
                    throw new SxmdException(f.getName() + "文件删除失败!");
                }
            } else {
                for (int i = 0; i < cs.length; i++) {
                    String cn = cs[i];
                    String cp = f.getPath() + File.separator + cn;
                    File f2 = new File(cp);
                    if (f2.exists() && f2.isFile()) {
                        log.error("delFile:[ " + f2 + " ]");
                        boolean isDelete = f2.delete();
                        if (!isDelete) {
                            System.out.println("delFile:[ " + f2.getName() + "文件删除失败!" + " ]");
                            throw new SxmdException(f2.getName() + "文件删除失败!");
                        }
                    } else if (f2.exists() && f2.isDirectory()) {
                        clean(f2);
                    }
                }
                System.out.println("delFile:[ " + f + " ]");
                boolean isDelete = f.delete();
                if (!isDelete) {
                    System.out.println("delFile:[ " + f.getName() + "文件删除失败!" + " ]");
                    throw new SxmdException(f.getName() + "文件删除失败!");
                }
            }
        }
        private static void writeZip(File file, String parentPath, ZipOutputStream zos,Boolean isDrop) {
            if(file.exists()){
                // 处理文件夹
                if(file.isDirectory()){
                    parentPath+=file.getName()+File.separator;
                    File [] files=file.listFiles();
                    if(files.length != 0)
                    {
                        for(File f:files){
                            writeZip(f, parentPath, zos,isDrop);
                        }
                    }
                    else
                    {       //空目录则创建当前目录
                        try {
                            zos.putNextEntry(new ZipEntry(parentPath));
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                }else{
                    FileInputStream fis=null;
                    try {
                        fis=new FileInputStream(file);
                        ZipEntry ze = new ZipEntry(parentPath + file.getName());
                        zos.putNextEntry(ze);
                        byte [] content=new byte[1024];
                        int len;
                        while((len=fis.read(content))!=-1){
                            zos.write(content,0,len);
                            zos.flush();
                        }
    
                    } catch (FileNotFoundException e) {
                        log.error("创建ZIP文件失败",e);
                    } catch (IOException e) {
                        log.error("创建ZIP文件失败",e);
                    }finally{
                        try {
                            if(fis!=null){
                                fis.close();
                            }
                            if(isDrop){
                                clean(file);
                            }
                        }catch(IOException e){
                            log.error("创建ZIP文件失败",e);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
    
    
        public static void main(String[] args) {
            System.out.println(createZip("E:\sxmd_plug_log","E:\a.zip",false));
        }
    
    }
  • 相关阅读:
    Ansible批量更新远程主机用户密码
    国外程序员推荐:每个程序员都应该读的非编程书
    FindFriendsServer服务搭建
    Android JNI HelloWorld实现
    2014年4月读书单
    jQuery 之父:每天写代码
    QT210 Android4.0源码编译和烧录文档整理
    Android系统分区理解及分区目录细解
    Android组件Spinner使用
    使用事件驱动模型实现高效稳定的网络服务器程序
  • 原文地址:https://www.cnblogs.com/chengyangyang/p/11276081.html
Copyright © 2011-2022 走看看