java实现文件夹打包zip

本文提供了一个使用Java实现文件夹压缩的示例代码。通过递归方式将指定路径下的文件夹及其内容压缩成同级目录下的.zip文件。示例展示了如何创建ZipOutputStream并逐个添加文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

和Windows直接右键操作压缩包一样,代码如下,可以直接拿去运行。

package com.corilead;
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class Test {
    public static void main(String[] args) throws Exception {
        Test3 test = new Test();
        String packagePath = "d:\\test";  //选中的文件夹
        test3.packageZip(packagePath);
    }

    public void packageZip(String filesPath) throws Exception {
        // 要被压缩的文件夹
        File file = new File(filesPath);   //需要压缩的文件夹
        File zipFile = new File(filesPath+".zip");  //放于和需要压缩的文件夹同级目录
        ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));
        isDirectory(file,zipOut,"",true);   //判断是否为文件夹
        zipOut.close();
    }

    public void isDirectory(File file, ZipOutputStream zipOutputStream, String filePath, boolean flag) throws IOException {
        //判断是否为问加减
        if(file.isDirectory()){
            File[] files = file.listFiles();  //获取该文件夹下所有文件(包含文件夹)
            filePath = flag==true?file.getName():filePath + File.separator + file.getName();   //首次为选中的文件夹,即根目录,之后递归实现拼接目录
            for(int i = 0; i < files.length; ++i){
                //判断子文件是否为文件夹
                if(files[i].isDirectory()){
                    //进入递归,flag置false 即当前文件夹下仍包含文件夹
                    isDirectory(files[i],zipOutputStream,filePath,false);
                }else{
                    //不为文件夹则进行压缩
                    InputStream input = new FileInputStream(files[i]);
                    zipOutputStream.putNextEntry(new ZipEntry(filePath+File.separator+files[i].getName()));
                    int temp = 0;
                    while((temp = input.read()) != -1){
                        zipOutputStream.write(temp);
                    }
                    input.close();
                }
            }
        }else{
            //将子文件夹下的文件进行压缩
            InputStream input = new FileInputStream(file);
            zipOutputStream.putNextEntry(new ZipEntry(file.getPath()));
            int temp = 0;
            while((temp = input.read()) != -1){
                zipOutputStream.write(temp);
            }
            input.close();
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值