欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java实现压缩文件的方法

程序员文章站 2022-05-15 13:11:30
...
package Zip;

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


/**
 * @author 犀角
 * @date 2019/10/28 16:16
 * @description
 */

public class Zip {
    /**
     * 压缩文件夹到指定目录(JDK)
     * @param srcDir 压缩文件夹
     * @param targetDir 压缩文件存放目录
     * @param zipName 压缩文件名字
     * @return
     */
    public static boolean toZip(String srcDir, String targetDir, String zipName)  {
        File src = new File(srcDir);
        if (!src.exists()) {
            //创建由这个抽象路径名命名的目录
            src.mkdirs();
        }
        //创建文件的抽象路径名数组,抽象路径名表示的目录
        File[] srcFiles=src.listFiles();
        if(srcFiles == null || srcFiles.length<1){
            System.out.println(srcDir+"目录下没有文件!");
            return false;
        }
        File zipFile = new File(targetDir + zipName);
        if (!zipFile.exists()){
            try {
                zipFile.createNewFile();
            } catch (IOException e) {
                System.out.println(targetDir + zipName + ".zip创建失败!");
                return false;
            }
        }

        FileOutputStream fos = null;
        ZipOutputStream zos = null;
        FileInputStream fis = null;
        BufferedInputStream bis = null;
        try {
            fos = new FileOutputStream(zipFile);
            zos = new ZipOutputStream(new BufferedOutputStream(fos));
            byte[] bufs = new byte[1024*8];
            for (File file:srcFiles){
                ZipEntry zipEntry=new ZipEntry(file.getName());
                zos.putNextEntry(zipEntry);
                fis = new FileInputStream(file);
                bis = new BufferedInputStream(fis,1024*8);
                int read = 0;
                while ((read = bis.read(bufs, 0, 1024*8)) !=-1){
                    zos.write(bufs,0,read);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println(srcDir + "压缩失败!");
            return false;
        }finally {
            try {
                if (zos!=null){
                    zos.close();
                }
                if (fos!=null){
                    fos.close();
                }
                if (fis!=null){
                    fis.close();
                }
                if (bis!=null){
                    bis.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return true;
    }
}