zoukankan      html  css  js  c++  java
  • 最近工作用到压缩,写一个zip压缩工具类

    package test;

    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;

    /**
    * @author ta0440 czy
    * @Description: 文件压缩工具类
    * 将指定文件/文件夹压缩成zip、rar压缩文件
    */
    public class CompressedFileUtil {
    /**
    * 默认构造函数
    */
    public CompressedFileUtil(){

    }

    /**
    * @desc 将源文件/文件夹生成指定格式的压缩文件,格式zip
    * @param resourePath 源文件/文件夹
    * @param targetPath 目的压缩文件保存路径
    * @return void
    * @throws Exception
    */
    public static File compressedFile(String resourcesPath,String targetPath) throws Exception{
    File resourcesFile = new File(resourcesPath); //源文件
    File targetFile = new File(targetPath); //目的
    //如果目的路径不存在,则新建
    if(!targetFile.exists()){
    targetFile.mkdirs();
    }

    String targetName = resourcesFile.getName()+".zip"; //目的压缩文件名
    FileOutputStream outputStream = new FileOutputStream(targetPath+"\"+targetName);
    ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(outputStream));

    createCompressedFile(out, resourcesFile, "");

    out.close();
    return targetFile;
    }

    /**
    * @desc 生成压缩文件。
    * 如果是文件夹,则使用递归,进行文件遍历、压缩
    * 如果是文件,直接压缩
    * @param out 输出流
    * @param file 目标文件
    * @return void
    * @throws Exception
    */
    public static void createCompressedFile(ZipOutputStream out,File file,String dir) throws Exception{
    //如果当前的是文件夹,则进行进一步处理
    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++){
    createCompressedFile(out, files[i], dir + files[i].getName()); //递归处理
    }
    }
    else{ //当前的是文件,打包处理
    //文件输入流
    FileInputStream fis = new FileInputStream(file);

    out.putNextEntry(new ZipEntry(dir));
    //进行写操作
    int j = 0;
    byte[] buffer = new byte[1024];
    while((j = fis.read(buffer)) > 0){
    out.write(buffer,0,j);
    }
    //关闭输入流
    fis.close();
    }
    }

    }

  • 相关阅读:
    [Give a try | Multithreading]The Practical Guide to Multithreading
    [SOLID]The Principles of OOD
    Mixing Native and Managed Types in C++
    [转载]关于大型软件重构的一些想法
    Mixed mode programming is the absolute power of C++/CLI
    Sample: Mixing Unmanaged C++, C++/CLI, and C# code
    添加删除虚函数带来的问题及解决办法
    如何阅读code base的组内讨论的总结
    如何快速定位一个函数的返回点(c/c++ Only)
    DirextX Training笔记
  • 原文地址:https://www.cnblogs.com/GodZhe/p/4981048.html
Copyright © 2011-2022 走看看