使用java中的java.util.zip包把文件或文件夹压缩成zip文件

硅谷探秘者 Md java基础 1215 0 0

核心类ZipOutputStream的api文档请参考:
https://nowjava.com/docs/java-api-11/java.base/java/util/zip/ZipOutputStream.html

java代码


import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipTest {
    public static void main(String[] args) throws Exception{
        // 本地文件夹位置
        File folder = new File("D://data//ziptest//log");

        // 生成压缩文件的位置
        String outputFileName = "D://data//ziptest//test.zip";

        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(
                new FileOutputStream(new File(outputFileName))
        );
        ZipOutputStream zipOutputStream = new ZipOutputStream(bufferedOutputStream);
        bfsZip(folder,zipOutputStream,"");
        zipOutputStream.finish();
        zipOutputStream.close();
        System.out.println("压缩成功");
    }

    private static void bfsZip(File file,ZipOutputStream zipOutputStream,String base) throws IOException {
        // 是文件夹
        if(file.isDirectory()){
            // 压缩文件夹
            base = base+file.getName()+"/";
            zipOutputStream.putNextEntry(new ZipEntry(base));
            File[] files = file.listFiles();
            if(files!=null && files.length>0){
                for (File file1 : files) {
                    // 递归压缩
                    bfsZip(file1,zipOutputStream,base);
                }
            }
            zipOutputStream.closeEntry();
        }else{
            // 是文件
            System.out.println(base+file.getName());
            zipOutputStream.putNextEntry(new ZipEntry(base+file.getName()));
            FileInputStream fileInputStream = new FileInputStream(file);
            BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
            byte[] b = new byte[1024];
            int length = 0;
            while ((length = bufferedInputStream.read(b))!=-1){
                zipOutputStream.write(b,0,length);
            }
            bufferedInputStream.close();
            fileInputStream.close();
            zipOutputStream.closeEntry();
        }
    }
}

评论区
请写下您的评论...
暂无评论...
猜你喜欢
java基础 1221 核心类ZipInputStreamapi档请参考:https://nowjava.com/docs/java-api-11/java.base/java/util/zip
算法基础 1938 前端项目正式发布时一般需要混淆js、css等,一方面能够使体积更小,更多节约网络io资源,另一方面能避免被人读懂你代码!!!!!!工具可以使uglifyjs2。安装通过npm安
java基础 1872 java参考:http://www.jiajiajia.club/blog/artical/1en1qpemej45/499一
算法基础 1281 安装node第一步依然是安装node,下载node.js安装,并安装:https://nodejs.org/en/全局安装clean-cssnpminstall-gclean-css局部安装
其他 2954 直接在资源管理器创建时候会提示:‘必须键入名’解决办法:在cmd命令行,cd某,执行md.abc即可创建一个名为.abc
minio 1952 rclone下载地址:https://rclone.org/downloads/ 解: unziprclone-v1.59.0-linux-amd64.zip cdcdrclone
工具 3213 要解析xml如下:soap:Envelopexmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"xmlns:xsd="http://www.
minio 2599 创建buckets 创建serviceaccounts java上传 maven依赖: dependency groupIdio.minio/groupId
归档
2018-11  12 2018-12  33 2019-01  28 2019-02  28 2019-03  32 2019-04  27 2019-05  33 2019-06  6 2019-07  12 2019-08  12 2019-09  21 2019-10  8 2019-11  15 2019-12  25 2020-01  9 2020-02  5 2020-03  16 2020-04  4 2020-06  1 2020-07  7 2020-08  13 2020-09  9 2020-10  5 2020-12  3 2021-01  1 2021-02  5 2021-03  7 2021-04  4 2021-05  4 2021-06  1 2021-07  7 2021-08  2 2021-09  8 2021-10  9 2021-11  16 2021-12  14 2022-01  7 2022-05  1 2022-08  3 2022-09  2 2022-10  2 2022-12  5 2023-01  3 2023-02  1 2023-03  4 2023-04  2 2023-06  3 2023-07  4 2023-08  1 2023-10  1 2024-02  1 2024-03  1 2024-04  1 2024-08  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job rabbitmq haproxy srs 音视频 webrtc javascript 加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。