JAVA生成ZIP包

 
  //这里用的是apache的zip工具
    //我在maven中引入的是ant1.9.4版本
    <!-- https://mvnrepository.com/artifact/org.apache.ant/ant ZIP压缩包 -->
    /*<dependency>
    <groupId>org.apache.ant</groupId>
    <artifactId>ant</artifactId>
    <version>1.9.4</version>
</dependency>

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

import java.io.*;


public class ExportZip {

   /**
    * 将目标文件压缩成文件夹
    * */
   public void compressedFile(String resourcePath,String targetPath) throws IOException {
       File resourceFile=new File(resourcePath);
       File targetFile=new File(targetPath);
       //如果路径不存在自行创建
       try {
           if (!targetFile.exists()) {
               targetFile.mkdirs();
           }
           String tagetName = resourceFile.getName() + ".zip";
           FileOutputStream outputStream = new FileOutputStream(targetFile + "\\" + tagetName);
           ZipOutputStream zipOut = new ZipOutputStream(new BufferedOutputStream(outputStream));

           creatCompressFile(zipOut, resourceFile, "");
           //压缩完之后输出流一定要记得关闭,不然会有异常的压缩末端的,多半粗心造成的
           zipOut.close();
           outputStream.close();
       }catch(Exception e){
           e.printStackTrace();;
       }

   }



    /*** 生成压缩文件,
    * 如果是文件夹遍历递归压缩
    *@param  file 目标文件
    * @param  out 输出流
    * */
    public void creatCompressFile(ZipOutputStream out, File file, String dir){
           //如果当前时文件夹,进行下一步遍历处理
        try {
            if (file.isDirectory()) {
                //获取文件夹下文件列表信息
                File[] files = file.listFiles();
                //将文件夹添加到下一级打包目录
                out.putNextEntry(new ZipEntry(dir + "/"));
                dir = dir.length() == 0 ? "" : dir + "/";

                for (int i = 0; i < files.length; i++) {
                    creatCompressFile(out, files[i], dir + files[i].getName());
                }
            } else {
                //当前是文件的话,直接打包处理
                //文件输出流
                System.out.println(file.getName());
                System.out.println(file.length());
                FileInputStream fis = new FileInputStream(file);
                out.putNextEntry(new ZipEntry(dir));
                //进行写操作
                int line=0;
                byte[] buffer=new byte[1024];
                while((line=fis.read(buffer))!=-1){
                    out.write(buffer,0,line);
                    System.out.println(line);

                }

                fis.close();


            }

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


 public static void main(String[] args){
    ExportZip compressedFileUtil = new ExportZip();

    try {
        compressedFileUtil.compressedFile("F:\\test\\57f17e8-a08f-43fa-898c-78f2497", "F:\\zip");
        System.out.println("压缩文件已经生成...");
    } catch (Exception e) {
        System.out.println("压缩文件生成失败...");
        e.printStackTrace();
    }
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值