文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

java 文件压缩zip【两种方式】

2023-08-31 11:08

关注

 一、普通方式

package com.hebta.source.code.util;import java.io.*;import java.util.zip.ZipEntry;import java.util.zip.ZipOutputStream;public class ZipUtils {        public String createZip(String[] files) {        String zipFileName = "zipName.zip";        // zipName为上一步文件打包zip时传入的zipName        File zipFile = new File("/woke/file/" + zipFileName);        if (!zipFile.getParentFile().exists()) {            zipFile.getParentFile().mkdirs();        }        if (!zipFile.exists()) {            try {                zipFile.createNewFile();            } catch (IOException e) {                e.printStackTrace();            }        }        zip(files, zipFile);        return zipFileName;    }        public void zip(String[] files, File zipFile) {        FileInputStream fileInputStream = null;        FileOutputStream fileOutputStream = null;        ZipOutputStream zipOutputStream = null;        BufferedInputStream bufferInputStream = null;        try {            // zipFileName为压缩文件的名称(xx.zip),首先在某个目录下(C:/temp/路径可以根据自己的需求进行修改)创建一个.zip结尾的文件            fileOutputStream = new FileOutputStream(zipFile);            zipOutputStream = new ZipOutputStream(new BufferedOutputStream(fileOutputStream));            // 创建读写缓冲区            byte[] bufs = new byte[1024 * 10];            for (String file : files) {                File voiceFile = new File(file);                if (voiceFile.exists()) {                    ZipEntry zipEntry;                    // 压缩文件下的目录分级,如果不分目录可以直接用fileName.文件后缀                    zipEntry = new ZipEntry("path/folderName/fileName." + getFileExtension(voiceFile));                    // 创建ZIP实体,并添加进压缩包                    zipOutputStream.putNextEntry(zipEntry);                    // 读取待压缩的文件并写进压缩包里                    fileInputStream = new FileInputStream(voiceFile);                    bufferInputStream = new BufferedInputStream(fileInputStream, 1024 * 10);                    int read = 0;                    while ((read = bufferInputStream.read(bufs, 0, 1024 * 10)) != -1) {                        zipOutputStream.write(bufs, 0, read);                    }                }            }        } catch (IOException e) {            e.printStackTrace();        } finally {            try {                if (bufferInputStream != null) {                    bufferInputStream.close();                }                if (zipOutputStream != null) {                    zipOutputStream.close();                }            } catch (IOException e) {                e.printStackTrace();            }        }    }        private static String getFileExtension(File file) {        String fileName = file.getName();        if (fileName.lastIndexOf(".") != -1 && fileName.lastIndexOf(".") != 0)            return fileName.substring(fileName.lastIndexOf(".") + 1);        else return " ";    }}

二、使用zip4j方式

引入jar:

                    net.lingala.zip4j            zip4j            2.8.0        

 代码块:

package com.hebta.source.code.util;import lombok.extern.slf4j.Slf4j;import net.lingala.zip4j.ZipFile;import net.lingala.zip4j.exception.ZipException;import net.lingala.zip4j.model.ZipParameters;import net.lingala.zip4j.model.enums.AesKeyStrength;import net.lingala.zip4j.model.enums.EncryptionMethod;import java.io.File;import java.util.ArrayList;import java.util.List;@Slf4jpublic class ZipUtils {        public static void createZip(List files, String zipName, String pwd) {        ZipParameters zipParameters = new ZipParameters();        zipParameters.setEncryptFiles(true);        zipParameters.setEncryptionMethod(EncryptionMethod.AES);        // Below line is optional. AES 256 is used by default. You can override it to use AES 128. AES 192 is supported only for extracting.        zipParameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256);        List filesToAdd = new ArrayList<>();        for (String file : files) {            filesToAdd.add(new File(file));        }//        将文件夹添加到压缩文件//        new ZipFile("filename.zip").addFolder(new File("/users/some_user/folder_to_add"));        ZipFile zipFile = new ZipFile(zipName, pwd.toCharArray());        try {            zipFile.addFiles(filesToAdd, zipParameters);        } catch (ZipException e) {            log.info("生成zip失败:" + e.getMessage());            e.printStackTrace();        }    }        public static void zipFileWithPwd(String inputFile,String outputFile, String pwd) {        // 生成的压缩文件        try {            ZipFile zipFile = new ZipFile(outputFile, pwd.toCharArray());            ZipParameters zipParameters = new ZipParameters();            zipParameters.setEncryptFiles(true);            zipParameters.setEncryptionMethod(EncryptionMethod.AES);            zipParameters.setAesKeyStrength(AesKeyStrength.KEY_STRENGTH_256);            // 要打包的文件夹            File currentFile = new File(inputFile);            File[] fs = currentFile.listFiles();            // 遍历test文件夹下所有的文件、文件夹            for (File f : fs) {                if (f.isDirectory()) {                    zipFile.addFolder(f, zipParameters);                } else {                    zipFile.addFile(f, zipParameters);                }            }        } catch (ZipException e) {            e.printStackTrace();        }    }}

来源地址:https://blog.csdn.net/clz979991314/article/details/127849372

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯