java程序压缩和解压zip文件

需要了解的知识汇总:
DeflaterOutputStream :压缩类的基类。
ZipOutputStream :DeflaterOutputStream的一个子类,把数据压缩成Zip文件格式
GZIPOutputStream :DeflaterOutputStream的一个子类,把数据压缩成GZip文件格式

InflaterInputStream :解压缩类的基类
ZipInputStream :InflaterInputStream的一个子类,能解压缩Zip格式的数据
GZIPInputStream :InflaterInputStream的一个子类,能解压缩Zip格式的数据

ZipEntry 类:表示 ZIP 文件条目
ZipFile 类:此类用于从 ZIP 文件读取条目

以zipentry来命名zip内文件列表。
以FileInputStream来读取文件。
以zipoutputstream输出流进行压缩文件写入。
逻辑简单好懂,附件带有实例,解压即可运行。
百度网盘实例链接:https://pan.baidu.com/s/1VSs-UqtU_3Lld2H7-1dMMg
提取码:mcb3

package com.crscd.server.web.cbtc2.filezip;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;

public class FileZip {
/*

  • author:zhao_anan 20190424 zip compress program
    /
    /
    public void zip(ZipOutputStream out, File f, String base, boolean first)
    throws Exception {
    if (first) {
    if (f.isDirectory()) {
    out.putNextEntry(new ZipEntry("/"));
    base = base + f.getName();
    first = false;
    } else
    base = f.getName();
    }
    if (f.isDirectory()) {
    File[] fl = f.listFiles();
    base = base + "/";
    for (int i = 0; i < fl.length; i++) {
    zip(out, fl[i], base + fl[i].getName(), first);
    }
    } 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();
    }
    }*/

    /*

  • unzip
    /
    /
    public void unZipFileByOpache(ZipFile zipFile, String unZipRoot)
    throws Exception, IOException {
    Enumeration<?> e = zipFile.entries();
    ZipEntry zipEntry;
    while (e.hasMoreElements()) {
    zipEntry = (ZipEntry) e.nextElement();
    InputStream fis = zipFile.getInputStream(zipEntry);
    if (zipEntry.isDirectory()) {
    } else {
    File file = new File(unZipRoot + File.separator
    • zipEntry.getName());
      System.out.println(unZipRoot + File.separator
    • zipEntry.getName());
      File parentFile = file.getParentFile();
      parentFile.mkdirs();
      FileOutputStream fos = new FileOutputStream(file);
      byte[] b = new byte[1024];
      int len;
      while ((len = fis.read(b, 0, b.length)) != -1) {
      fos.write(b, 0, len);
      }
      fos.close();
      fis.close();
      }
      }
      }

    public void ZipFile(String zipFileName, String inputFileName)
    throws Exception {
    ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
    zipFileName));
    File inputFile = new File(inputFileName);
    zip(out, inputFile, "", true);
    System.out.println("zip done");
    out.close();
    }

    public void unZipFile(String unZipFileName, String unZipPath)
    throws Exception {
    //ZipFile zipFile = new ZipFile(unZipFileName);
    //unZipFileByOpache(zipFile, unZipPath);
    System.out.println("unZip Ok");
    }

    public static void main(String[] args) throws Exception {
    FileZip fileZip = new FileZip();
    // ZipFile("d:/testfile.zip","d:/TTPlayer");
    fileZip.unZipFile("d:/20120206_SLIS_0002_DY2.zip", "d:/");
    }*/

    /**

  • unzip file 20190424
  • @auther: zhao_anan
  • @param unzipRoot
  • */
    public void unZipFile(String zipFilename, String unzipRoot)
    throws Exception {
    BufferedOutputStream bos = null;
    FileInputStream fis = new FileInputStream(zipFilename);
    BufferedInputStream bis = new BufferedInputStream(fis);
    ZipInputStream zis = new ZipInputStream(bis);
    ZipEntry entry = null;
    
    int count = 0;
    byte buf[] = new byte[1024];
    
    while ((entry = zis.getNextEntry()) != null) {
    
        if (entry.isDirectory()) {
    
        } else {
            File file = new File(unzipRoot + File.separator
                    + entry.getName());
            File parentFile = file.getParentFile();
            parentFile.mkdirs();
    
            bos = new BufferedOutputStream(new FileOutputStream(file));
            while ((count = zis.read(buf)) != -1) {
                bos.write(buf, 0, count);
            }
            bos.flush();
            bos.close();
        }
    }
    zis.close();

    }
    /**

  • zip
  • @param zipFilename
  • @param unzipRoot
  • */
    private void zip(ZipOutputStream out, File f, String base, boolean first)
    throws Exception {
    if (first) {
    if (f.isDirectory()) {
    out.putNextEntry(new ZipEntry("/"));
    base = base + f.getName();
    first = false;
    } else
    base = f.getName();
    }
    if (f.isDirectory()) {
    File[] fl = f.listFiles();
    base = base + "/";
    for (int i = 0; i < fl.length; i++) {
    zip(out, fl[i], base + fl[i].getName(), first);
    }
    } else {
    out.putNextEntry(new ZipEntry(base));
    // FileInputStream in = new FileInputStream(f);
    BufferedReader in = new BufferedReader(new InputStreamReader(
    new FileInputStream(f), "ISO8859_1"));
    int b;
    System.out.println(base);
    while ((b = in.read()) != -1) {
    out.write(b);
    }
    in.close();
    }
    }

    public void zipFile(String zipFileName, String inputFileName)
    throws Exception {
    ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
    zipFileName));
    File inputFile = new File(inputFileName);
    zip(out, inputFile, "", true);
    System.out.println("zip done");
    out.close();
    }

    /**

  • zip
  • @param zipFilename
  • @param unzipRoot
  • */
    private void zipList(ZipOutputStream out, String[] fileList, String base)
    throws Exception {
    base = base + "\";
    for (int i = 0; i < fileList.length; i++) {
    //zip(out, , base + fileList[i], first);
    out.putNextEntry(new ZipEntry(fileList[i]));
    BufferedReader in = new BufferedReader(new InputStreamReader(
    new FileInputStream(base + fileList[i]), "ISO8859_1"));
    int b;
    System.out.println(base + fileList[i]);
    while ((b = in.read()) != -1) {
    out.write(b);
    }
    in.close();
    }
    }

    public void zipListFile(String zipFileName, String inputListFiles, String baseurl)
    throws Exception {
    ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
    zipFileName));
    String[] FileList = inputListFiles.split(",");
    zipList(out, FileList, baseurl);
    System.out.println("zip done");
    out.close();
    }

    public static void main(String[] args) {

    //压缩测试
    FileZip tFileZip = new FileZip();
    String tinputFileName = "E:\\temp";
    String baseurl = "E:\\temp";
    String tzipFileName = "E:\\temp.zip";
    String inputListFiles = "application-dev.yml,auto_arrange.yml";
    try {
        //tFileZip.zipFile(tzipFileName, tinputFileName);
        tFileZip.zipListFile(tzipFileName, inputListFiles, baseurl);
        //tFileZip.unZipFile(tzipFileName, baseurl + "unzip");
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    }
    }

原文地址:https://blog.51cto.com/zhaoanan/2383709

时间: 2024-12-29 07:23:25

java程序压缩和解压zip文件的相关文章

java 压缩和解压zip包

网上有关压缩和解压zip包的博文一大堆,我随便找了一个,看了看,按照自己的需要修改了一下,与各位分享一下,希望各位大神指正: package com.wangpeng.utill; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import

PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载

PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载 http://my.oschina.net/junn/blog/104464 PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法就不说了,不同的平台开启PHP扩增的方法网上都有,如有疑问欢迎交流.这里整理一下常用的示例供参考. 一.解压缩zip文件 ? 1 2 3 4 5 6 7 8 9 10 11 $zip = new ZipAr

PHP扩展类ZipArchive实现压缩解压Zip文件和文件打包下载 &amp;&amp; Linux下的ZipArchive配置开启压缩

PHP ZipArchive 是PHP自带的扩展类,可以轻松实现ZIP文件的压缩和解压,使用前首先要确保PHP ZIP 扩展已经开启,具体开启方法就不说了,不同的平台开启PHP扩增的方法网上都有,如有疑问欢迎交流.这里整理一下常用的示例供参考. 一.解压缩zip文件 ? 1 2 3 4 5 6 7 8 9 10 11 $zip = new ZipArchive;//新建一个ZipArchive的对象 /* 通过ZipArchive的对象处理zip文件 $zip->open这个方法的参数表示处理的

Java 上传解压zip文件,并且解析文件里面的excel和图片

需求:上传一个zip文件,zip文件里面包含一个excel和很多图片,需要把excel里面的信息解析出来保存到表中,同时图片也转化成base64保存到数据库表中. PS:为了方便不同水平的开发人员阅读,我把代码全部写到Controller里面.这个demo的file入参的类型是MultipartFile,很多网上的例子是File类型.这两个类型在解析文件的时候还是有点区别的. 第①个方法: 1 /** 2 * 这个deomo入参的类型是MultipartFile,很多网上的例子是File类型 3

java压缩解压zip文件,中文乱码还需要ant.jar包

va] view plaincopyprint? package cn.cn; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; i

C#压缩解压zip 文件

1 /// <summary> 2 /// Zip 压缩文件 3 /// </summary> 4 public class Zip 5 { 6 public Zip() 7 { 8 9 } 10 #region 加压方法 11 /// <summary> 12 /// 功能:压缩文件(暂时只压缩文件夹下一级目录中的文件,文件夹及其子级被忽略) 13 /// </summary> 14 /// <param name="dirPath&quo

Mac下用命令行压缩和解压rar文件的方法(转)

废话不多说,直接进入主题 第一步:下载RAR工具包或https://www.rarlab.com/download.htm,根据自己需要下载相对应的版本 第二步:解压对应的压在的压缩包rarosx-5.4.0.tar.gz(我下载的是5.4.0版本) 第三步:从终端进入到解压文件夹rar,里面是刚才下载的文件 cd Downloads/rar 第四步: 执行安装rar和unrar工具的命令 rar:sudo install -c -o $USER rar /usr/local/bin/ unra

C#文件或文件夹压缩和解压方法(通过ICSharpCode.SharpZipLib.dll)

我在网上收集一下文件的压缩和解压的方法,是通过ICSharpCode.SharpZipLib.dll 来实现的 一.介绍的目录 第一步:下载压缩和解压的 ICSharpCode.SharpZipLib.dll 支持库 第二步:创建一个压缩和解压的demo项目 第三步:查看压缩和解压的文件的结果 二.demo演示(包括源码和界面) 1.下载文件压缩和解压的支持库dll ,下载地址:http://pan.baidu.com/s/1pLausnL 2.创建window创建项目 1) 添加引用(文件压缩

linux压缩和解压,socket编程

1.使用zip和unzip压缩和解压 Zip aa.zip  文件名(一个) Zip aa.zip 文件名1 文件名2(压缩多个文件) Zip -r aa.zip  文件夹路径(压缩整个文件夹) zip -t 102002 file.zip 压缩当前目录下在2002 10月20日之后的文件压缩 zip file.zip * -x file2.txt 压缩时,将当前目录内的file2.txt文件排除在外 2.解压 unzip aa.zip unzip file.zip x file2 :除了fil