JAVA 实现压缩文件夹中的所以文件包括目录,zpi压缩包

实现方式其实很简单,主要是用于JAVA中的Uti包下面的zip包中类和方式去实现,
主要实现还是通过流去进行文件压缩:
java.util.zip.ZipEntry
java.util.zip.ZipOutputStream

        /**
         * 压缩成ZIP 方法1
         * @param srcDir 压缩文件夹路径
         * @param out    压缩文件输出流
         * @param KeepDirStructure  是否保留原来的目录结构,true:保留目录结构;
         * false: 所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)
         * @throws RuntimeException 压缩失败会抛出运行时异常
         */
    public static void zipCompress(String srcDir, OutputStream out, boolean KeepDirStructure)
        throws RuntimeException{
        long start = System.currentTimeMillis();
        ZipOutputStream zos = null ;
        try {
            zos = new ZipOutputStream(out);
            File sourceFile = new File(srcDir);
            compress(sourceFile,zos,sourceFile.getName(),KeepDirStructure);
            long end = System.currentTimeMillis();
            System.out.println("压缩完成,耗时:" + (end - start) +" ms");
        } catch (Exception e) {
            throw new RuntimeException("zip error from ZipUtils",e);
        }finally{
            if(zos != null){
                try {
                    zos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

创建压缩文件 zip 用于接受压缩文件:

    /**
     * 创建压缩文件:
     * @param zipath
     * @throws Exception
     */
    public static String createNewzip(String zipath) throws Exception {
        ZipOutputStream zoutput = null;
        File file = null;
        try {
             file = new File(zipath);
            if(!file.exists())
            {
                file.createNewFile();
            }
            FileOutputStream fOutputStream = new FileOutputStream(file);
            zoutput = new ZipOutputStream(fOutputStream);

        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            zoutput.closeEntry();
            zoutput.close();
        }

        if(null != file){
            return  file.getPath();
        }
        return  "";
    }

测试代码:

	String newzip = ZipFileUtils.createNewzip(realPath + "\\" + "待签约合同文件" + ".zip");
						FileOutputStream fos1 = new FileOutputStream(new File(newzip));
						Test.zipCompress(mrker, fos1,true);

建议生成后删除掉,不然文件会一直创建,如果是线上的话,还要有创建文件的权限,不然代码就不能执行,会出现创建文件没有权限的错误,本地的没有问题

    原文作者:花辞树oo
    原文地址: https://blog.csdn.net/qrn196789910/article/details/106815721
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞