Java生成zip文件工具类

 依赖

<!-- 文件压缩zip操作依赖-->
        <dependency>            
            <groupId>org.apache.ant</groupId>         
            <artifactId>ant</artifactId>           
            <version>1.9.7</version>        
        </dependency>

ZIP工具类以及测试

package com.example.demo.files;

import org.springframework.util.StringUtils;

import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
 * @describtion 压缩文件工具
 * @creator 
 * @create-time 9:47 2019/11/18
 **/
public class ZipUtil {

    /**
     * 生成zip压缩文件
     * @param fileList 要压缩的文件列表
     * @param zipName 生成的zip文件名
     */
    public static void genZip(List<File> fileList, String zipName) {
        if(fileList == null) {
            return;
        }
        if(StringUtils.isEmpty(zipName)) {
            zipName = "G:"+File.separator+UUID.randomUUID().toString().substring(0,6)+"test.zip";
        }
        ZipOutputStream zos = null;
        try {
            zos = new ZipOutputStream(new FileOutputStream(zipName));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        System.out.println("start......");
        for(File file : fileList) {
            try {
                zos.putNextEntry(new ZipEntry(file.getName()));
                System.out.println("文件名....."+file.getName());
                int len;
                // 定义缓冲区
                byte[] buf = new byte[1024];
                FileInputStream fis = new FileInputStream(file);
                while((len = fis.read(buf)) != -1) {
                    zos.write(buf,0, len);
                }
                fis.close();
                zos.closeEntry();

            } catch (IOException e) {
                e.printStackTrace();
            }

        }

        if(zos != null) {
            try {
                zos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        System.out.println("end....");

    }


    /**
     * 压缩指定路径下的所有文件
     * @param path
     */
    public static void toZip(String path, String fileName) {
        if(StringUtils.isEmpty(path)) {
            return;
        }
        List<File> files = getFiles(path);

        genZip(files,fileName);
    }

    /**
     *
     * 递归获取path下所有文件
     * @param path 指定文件路径
     * @return
     */
    private static List<File> getFiles(String path) {
        List<File> files = new ArrayList<>();
        File file = new File(path);

        if(file.isDirectory()) {
            File[] files1 = file.listFiles();
            for(File f : files1) {
                if(f.isDirectory()) {
                    getFiles(f.getPath());
                }else {
                    // 不含zip文件,这里可以对文件类型做限制
                    if(!f.getName().endsWith("zip")) {
                        files.add(f);
                    }
//                    files.add(f);
                }
            }
        }
        return files;
    }

    public static void main(String[] args) {
       List<File> files = new ArrayList<>();
       File file = new File("G:"+File.separator+"test");
       File[] files1 = file.listFiles();
       for(File f : files1) {
            if(f.isFile()) {
                files.add(f);
            }
       }
       System.out.println(files.size());
       genZip(files,"G:"+File.separator+"test"+File.separator+"test.zip");
        
       toZip("G:"+File.separator+"test","");
    }
}
发布了59 篇原创文章 · 获赞 33 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_41010294/article/details/103120633
今日推荐