[Java 基础] 使用java.util.zip包压缩和解压缩文件

reference :  http://www.open-open.com/lib/view/open1381641653833.html

Java API中的import java.util.zip.*;包下包含了Java对于压缩文件的所有相关操作。

我们可以使用该包中的方法,结合IO中的相关知识,进行文件的压缩和解压缩相关操作。

ZipFile

java中的每一个压缩文件都是可以使用ZipFile来进行表示的。

File file = new File("F:/zippath.zip");
ZipFile zipFile = new ZipFile(file);
System.out.println("压缩文件的名称为:" + zipFile.getName());

压缩单个文件

/** 压缩单个文件*/
public static void ZipFile(String filepath ,String zippath) {
    try {
        File file = new File(filepath);
        File zipFile = new File(zippath);
        InputStream input = new FileInputStream(file);
        ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));
        zipOut.putNextEntry(new ZipEntry(file.getName()));
        int temp = 0;
        while((temp = input.read()) != -1){
            zipOut.write(temp);
        }
        input.close();
        zipOut.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

应用:

ZipFile("d:/hello.txt", "d:/hello.zip");

压缩多个文件(文件夹)

/** 一次性压缩多个文件,文件存放至一个文件夹中*/
public static void ZipMultiFile(String filepath ,String zippath) {
    try {
        File file = new File(filepath);// 要被压缩的文件夹
        File zipFile = new File(zippath);
        InputStream input = null;
        ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));
        if(file.isDirectory()){
            File[] files = file.listFiles();
            for(int i = 0; i < files.length; ++i){
                input = new FileInputStream(files[i]);
                zipOut.putNextEntry(new ZipEntry(file.getName() + File.separator + files[i].getName()));
                int temp = 0;
                while((temp = input.read()) != -1){
                    zipOut.write(temp);
                }
                input.close();
            }
        }
        zipOut.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

应用:

ZipMultiFile("f:/uu", "f:/zippath.zip");

解压缩单个文件

/**  解压缩(解压缩单个文件)*/
public static void ZipContraFile(String zippath ,String outfilepath ,String filename) {
    try {
        File file = new File(zippath);//压缩文件路径和文件名
        File outFile = new File(outfilepath);//解压后路径和文件名
        ZipFile zipFile = new ZipFile(file);
        ZipEntry entry = zipFile.getEntry(filename);//所解压的文件名
        InputStream input = zipFile.getInputStream(entry);
        OutputStream output = new FileOutputStream(outFile);
        int temp = 0;
        while((temp = input.read()) != -1){
            output.write(temp);
        }
        input.close();
        output.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

应用:

ZipContraFile("d:/hello.zip","d:/eee.txt", "hello.txt");

解压缩多个文件

ZipInputStream类:

当我们需要解压缩多个文件的时候,ZipEntry就无法使用了。

如果想操作更加复杂的压缩文件,我们就必须使用ZipInputStream类。

/**  解压缩(压缩文件中包含多个文件)可代替上面的方法使用。
 * ZipInputStream类
 * 当我们需要解压缩多个文件的时候,ZipEntry就无法使用了,
 * 如果想操作更加复杂的压缩文件,我们就必须使用ZipInputStream类
 * */
public static void ZipContraMultiFile(String zippath ,String outzippath){
    try {
        File file = new File(zippath);
        File outFile = null;
        ZipFile zipFile = new ZipFile(file);
        ZipInputStream zipInput = new ZipInputStream(new FileInputStream(file));
        ZipEntry entry = null;
        InputStream input = null;
        OutputStream output = null;
        while((entry = zipInput.getNextEntry()) != null){
            System.out.println("解压缩" + entry.getName() + "文件");
            outFile = new File(outzippath + File.separator + entry.getName());
            if(!outFile.getParentFile().exists()){
                outFile.getParentFile().mkdir();
            }
            if(!outFile.exists()){
                outFile.createNewFile();
            }
            input = zipFile.getInputStream(entry);
            output = new FileOutputStream(outFile);
            int temp = 0;
            while((temp = input.read()) != -1){
                output.write(temp);
            }
            input.close();
            output.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

应用:

ZipContraMultiFile("f:/zippath.zip", "d:/");
ZipContraMultiFile("d:/hello.zip", "d:/");
时间: 2024-12-15 08:01:36

[Java 基础] 使用java.util.zip包压缩和解压缩文件的相关文章

java架构 [Java 基础] 使用java.util.zip包压缩和解压缩文件

Java API中的import java.util.zip.*;包下包含了Java对于压缩文件的所有相关操作. 我们可以使用该包中的方法,结合IO中的相关知识,进行文件的压缩和解压缩相关操作. ZipFile java中的每一个压缩文件都是可以使用ZipFile来进行表示的. File file = new File("F:/zippath.zip"); ZipFile zipFile = new ZipFile(file); System.out.println("压缩文

java.util.zip包在解压缩文件方面入门使用

工作空闲之余,无意间点了一下java.util.zip包下面的一些源码看了一看.知道其使用的范围就是针对我们日常中关于 文件的压缩和解压的操作.写了一些常用的压缩文件(单个文件和多个文件的压缩).解压文件(解压单个文件和文件夹)的 小小Demo. package com.clark.zip; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IO

Java对zip格式压缩和解压缩

Java对zip格式压缩和解压缩 通过使用java的相关类可以实现对文件或文件夹的压缩,以及对压缩文件的解压. 1.1 ZIP和GZIP的区别 gzip是一种文件压缩工具(或该压缩工具产生的压缩文件格式),它的设计目标是处理单个的文件.gzip在压缩文件中的数据时使用的就是zlib.为了保存与文件属性有关的信息,gzip需要在压缩文件(*.gz)中保存更多的头信息内容,而zlib不用考虑这一点.但gzip只适用于单个文件,所以我们在UNIX/Linux上经常看到的压缩包后缀都是*.tar.gz或

Java用ZIP格式压缩和解压缩文件

转载:java jdk实例宝典 感觉讲的非常好就转载在这保存! java.util.zip包实现了Zip格式相关的类库,使用格式zip格式压缩和解压缩文件的时候,须要导入该包. 使用zipoutputstream能够实现文件压缩,全部写入到zipoutputstream输入流中的数据,都会被ZIP格式压缩. 每一个被压缩的文件或者文件夹在zip文件里都相应一个zipentry对象,每一个zipentry都有一个name属性,表示它相对于zip文件文件夹的相对路径,对于文件夹,路径以“/“结尾,对

java压缩和解压缩Zip、Jar、Gzip文件

我们经常会使用WinZIP等压缩软件将文件进行压缩以方便传输.在java里面也提供了将文件进行压缩以减少传输时的数据量的类,可以很方便的将文件压缩成ZIP.JAR.GZIP等形式,GZIP主要是在Linux系统下的压缩文件. 下面主要讲的就是ZIP形式的压缩文件,而JAR.GZIP形式的压缩文件也是类似的用法. ZIP是一种很常见的压缩形式,在java中要实现ZIP的压缩主要用到的是java.util.zip这个包里面的类.主要有ZipFile. ZipOutputStream.ZipInput

JAVA实现多文件压缩和解压缩

[使用java进行压缩和解压缩] 亲测可用: import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.Zi

【转】Java压缩和解压文件工具类ZipUtil

特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/mao2080/ 1 package com.utility.zip; 2 3 import java.io.BufferedInputStream; 4 import java.io.BufferedOutputStream; 5 import java.io.File; 6 import jav

java工具类——java将一串数据按照gzip方式压缩和解压缩

我要整理在工作中用到的工具类分享出来,也方便自己以后查阅使用,这些工具类都是我自己实际工作中使用的 import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; import java.nio

【java基础】Java反射机制

一.预先需要掌握的知识(java虚拟机)  1)java虚拟机的方法区:  java虚拟机有一个运行时数据区,这个数据区又被分为方法区,堆区和栈区,我们这里需要了解的主要是方法区.方法区的主要作用是存储被装载的类 的类型信息,当java虚拟机装载某个类型的时候,需要类装载器定位相应的class文件,然后将其读入到java虚拟机中,紧接着虚拟机提取class 中的类型信息,将这些信息存储到方法区中.这些信息主要包括: 这个类型的全限定名 这个类型的直接超类的全限定名 这个类型是类类型还是接口类型