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

硅谷探秘者 java基础 101 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基础 80 核心类ZipInputStreamapi档请参考:https://nowjava.com/docs/java-api-11/java.base/java/util/zip
算法基础 201 前端项目正式发布时一般需要混淆js、css等,一方面能够使体积更小,更多节约网络io资源,另一方面能避免被人读懂你代码!!!!!!工具可以使uglifyjs2。安装通过npm安
java基础 98 java参考:http://www.jiajiajia.club/blog/artical/1en1qpemej45/499一
算法基础 133 安装node第一步依然是安装node,下载node.js安装,并安装:https://nodejs.org/en/全局安装clean-cssnpminstall-gclean-css局部安装
其他 2025 直接在资源管理器创建时候会提示:‘必须键入名’解决办法:在cmd命令行,cd某,执行md.abc即可创建一个名为.abc
工具 2247 要解析xml如下:soap:Envelopexmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"xmlns:xsd="http://www.
weblog 1204 java使easypoi导出并下载excel简单导出测试如图:一、pomdependencygroupIdcn.afterturn/groupIdartifactIdeasypoi
框架 2975 SpringBoot打分离资源springboot项目打时,资源,如配置,静态资源等分离出来,避免为了修改资源时重新打。方式11.pombuildplugins
归档
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月  6
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议
目录
祝愿神州十三飞行乘组平安归来