java zip压缩

package com.zt.common;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

//import org.apache.tools.zip.ZipEntry;
//import org.apache.tools.zip.ZipFile;
//import org.apache.tools.zip.ZipOutputStream;


public class ZipUtil {

    /**  
     * 压缩文件夹  
     * @param zipPath   生成的zip文件路径  
     * @param filePath  需要压缩的文件夹路径  
     * @throws Exception  
     */
    public void zipFolder(String zipPath, String filePath) throws Exception {
        ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipPath));
        File f = new File(filePath);
        zipFiles(out, f, "");
        out.close();
    }

    /**  
     * 压缩单一个文件  
     * @param zipPath   生成的zip文件路径  
     * @param filePath  需要压缩的文件路径  
     * @throws Exception  
     */
    public void zipFile(String zipPath, String filePath) throws Exception {
        File f = new File(filePath);
        FileInputStream fis = new FileInputStream(f);
        BufferedInputStream bis = new BufferedInputStream(fis);
        byte[] buf = new byte[1024];
        int len;
        FileOutputStream fos = new FileOutputStream(zipPath);
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        ZipOutputStream zos = new ZipOutputStream(bos);//压缩包  
        ZipEntry ze = new ZipEntry(f.getName());//这是压缩包名里的文件名  
        zos.putNextEntry(ze);// 写入新的ZIP文件条目并将流定位到条目数据的开始处  

        while ((len = bis.read(buf)) != -1) {
            zos.write(buf, 0, len);
            zos.flush();
        }
        bis.close();
        zos.close();

    }

    /**  
     * 递归调用,压缩文件夹和子文件夹的所有文件  
     * @param out  
     * @param f  
     * @param base  
     * @throws Exception  
     */
    private void zipFiles(ZipOutputStream out, File f, String base) throws Exception {
        if (f.isDirectory()) {
            File[] fl = f.listFiles();
            out.putNextEntry(new ZipEntry(base + "/"));
            base = base.length() == 0 ? "" : base + "/";
            for (int i = 0; i < fl.length; i++) {
                zipFiles(out, fl[i], base + fl[i].getName());//递归压缩子文件夹  
            }
        } else {
            out.putNextEntry(new ZipEntry(base));
            FileInputStream in = new FileInputStream(f);
            int b;
            //System.out.println(base);  
            while ((b = in.read()) != -1) {
                out.write(b);
            }
            in.close();
        }
    }

    /**  
     * @param args  
     */
    public static void main(String[] args) {
        System.out.println("Zip File Begin");

        ZipUtil zip = new ZipUtil();
        String zipPath = "D:\\test.zip";
        String filePath = "D:\\新建文件夹";
        try {
           // zip.zipFile(zipPath, filePath);//压缩文件  
            zip.zipFolder(zipPath, filePath);//压缩文件夹  
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        System.out.println("Zip File Done");
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用Java压缩文件夹,你可以使用JavaZipOutputStream类。下面是一个简单的步骤来压缩一个文件夹: 1. 首先,创建一个ZipOutputStream对象,并指定要创建的压缩文件的输出流。 2. 遍历要压缩的文件夹,并获取所有文件和子文件夹的路径。 3. 对于每个文件和子文件夹,创建一个ZipEntry对象,并设置它的名称为文件或文件夹的相对路径。 4. 如果当前项是一个文件夹,调用ZipOutputStream的putNextEntry方法来添加它到压缩文件中。 5. 如果当前项是一个文件,使用FileInputStream读取文件的内容,并使用ZipOutputStream的write方法将文件的内容写入压缩文件中。 6. 循环结束后,关闭ZipOutputStream对象,完成压缩文件夹的过程。 下面是一个示例代码来演示如何使用Java压缩文件夹: ```java import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class ZipFolderExample { public static void main(String[] args) { String folderPath = "path_to_folder"; String zipFilePath = "path_to_zip_file.zip"; try (FileOutputStream fos = new FileOutputStream(zipFilePath); ZipOutputStream zos = new ZipOutputStream(fos)) { File folder = new File(folderPath); addFolderToZip(folder, "", zos); System.out.println("Folder successfully compressed!"); } catch (IOException e) { e.printStackTrace(); } } private static void addFolderToZip(File folder, String parentFolder, ZipOutputStream zos) throws IOException { for (File file : folder.listFiles()) { if (file.isDirectory()) { addFolderToZip(file, parentFolder + file.getName() + "/", zos); continue; } FileInputStream fis = new FileInputStream(file); ZipEntry zipEntry = new ZipEntry(parentFolder + file.getName()); zos.putNextEntry(zipEntry); byte[] buffer = new byte
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值