java实现zip的压缩和解压

原创 2015年11月19日 14:55:23
package cn.tzz.zip;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

public class ZipUtils {

	/**
	 * 文件压缩(支持一次压缩多个文件,文件存放至一个文件夹中)
	 * 中文名乱码,采用Apache的zip包可解决
	 */
    public static void ZipFile(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();
	        }else{//压缩单个文件
	        	input = new FileInputStream(file);
	        	String fileName = new String(file.getName().getBytes(), "UTF-8");
                zipOut.putNextEntry(new ZipEntry(fileName));
                int temp = 0;
                while((temp = input.read()) != -1){
                    zipOut.write(temp);
                }
                input.close();
                zipOut.close();
	        }
	        zipOut.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
    
    /**  解压缩(解压缩单个文件)*/
    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();
		}
	}
    
    /**  解压缩(压缩文件中包含多个文件)可代替上面的方法使用。
     * 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();
		}
    }
    
    public static void main(String[] args) {
		ZipFile("E:/zip/中文名.txt", "E:/zip/压缩单个文件.zip");
		ZipFile("E:/zip", "E:/压缩多个文件.zip");
		ZipContraFile("E:/zip/压缩单个文件.zip","E:/zip/解压文件.txt", "1.txt");
		ZipContraMultiFile("E:/压缩多个文件.zip","E:/zip2");
		System.out.println("********执行成功**********");
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

JAVA实现实用的ZIP压缩与解压

程序实现了ZIP压缩。共分为2部分 : 压缩(compression)与解压(decompression) 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和...
  • z69183787
  • z69183787
  • 2014年08月14日 11:10
  • 2899

Java实现Zip压缩与解压(解决中文乱码问题)

解决中文压缩与解压问题  使用的是org.apache.tools.zip包下面的相关类  下面是自己写的类,可以设置和获取Zip文件的注释信息  Java代码   [java] ...
  • huningjun
  • huningjun
  • 2015年08月03日 18:23
  • 1975

java实现对rar文件和zip文件的解压缩

java实现对rar文件和zip文件的解压缩 一.对zip文件的解压缩 1.1 使用ZIP4J实现 zip4j官方说明: Create, Add, Extract, Update, R...
  • u012100371
  • u012100371
  • 2017年07月12日 16:47
  • 1095

java实现zip压缩和解压缩 源码

package zip; import java.io.*; import java.util.zip.*; /** * 将存放在sourceFilePath目录下的源文件,打包成fileNam...
  • jian51868
  • jian51868
  • 2014年12月02日 13:02
  • 3662

Java实现Zip文件的解压和压缩_ZipUtil

Java实现文件的压缩和解压
  • qq_28082757
  • qq_28082757
  • 2017年04月06日 15:05
  • 312

Java zip/gzip文件压缩和解压缩

Java IOJAVA IO 支持的三种压缩格式:zip、gzip、jar。压缩文件@Test public void testZip() throws IOException { File z...
  • FX_SKY
  • FX_SKY
  • 2016年11月01日 16:30
  • 1413

java实现zip的压缩和解压(支持中文文件名)

用过java做压缩或解压的都知道,jdk提供的zip只能按UTF-8格式处理,所有jdk提供的zip不能支持中文文件名采用Apache的zip包解决中文文件名问题(依赖 ant-1.9.6.jar...
  • tanksyg
  • tanksyg
  • 2015年11月19日 14:58
  • 5451

JAVA API实现ZIP压缩与解压

程序实现了ZIP压缩。共分为2部分 : 压缩(compression)与解压(decompression) 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压...
  • zmx729618
  • zmx729618
  • 2016年08月05日 14:05
  • 1126

Java的压缩、解压及压缩加密、解密解压 例子

为了节约带宽、加快传送速度,http协议支持gzip的压缩,但如果我们的app与后台不是通过http协议通讯的,那么压缩、解压这个流程需要自己写。而对于游戏领域、金融领域的通讯,数据加密尤为重要,这篇...
  • rocklee
  • rocklee
  • 2014年05月21日 09:39
  • 1969

java 处理zip压缩/解压 文件/目录

环境操作系统: win7 java: jdk7需求需要把多个jar进行打包,方便上传。步骤这里我们需要用到的java api有:ZipOutputStream、ZipEntry。单个文件的压缩 ...
  • u013066244
  • u013066244
  • 2017年05月26日 16:42
  • 1443
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java实现zip的压缩和解压
举报原因:
原因补充:

(最多只允许输入30个字)