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 java.io.InputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;

/**
 * @author wangpeng
 */
public class ToolOfZip {

	/**
	 * 解压zip包
	 * @param inputPath 被解压的zip包的路径
	 * @param targetPath 被解压到的目录
	 * @param isClear 是否清楚已有目录
	 */
	public static void unZip(String inputPath,String targetPath, boolean isClear) {
		try {
			if (null == targetPath || "".equals(targetPath)) {
				targetPath = inputPath.substring(0,inputPath.lastIndexOf("."));
			} 

			ZipFile zipFile = new ZipFile(new File(inputPath));
			Enumeration<? extends ZipEntry> entrys = zipFile.entries();

			while (entrys.hasMoreElements()) {
				ZipEntry entry = entrys.nextElement();
				String name = entry.getName();// aaa\testdir\xxxxx\eee.txt
				String strTargetPath=targetPath+"/"+name;
				String strTargetDir=strTargetPath.substring(0, strTargetPath.lastIndexOf(File.separator));
				if (entry.isDirectory()) {
					File dir = new File(strTargetPath);
					if (!dir.exists()) {
						dir.mkdirs();
					}
				} else {
					File dir = new File(strTargetDir);
					if (!dir.exists()) {
						dir.mkdirs();
					}

					File file = new File(strTargetPath);
					if (file.exists() && isClear) {
						file.delete();
					}

					if (!file.exists()) {
						InputStream in = zipFile.getInputStream(entry);
						ToolOfFile.copyFile(in, file.getAbsolutePath());
					}
				}
			}
		} catch (ZipException ex) {
			ex.printStackTrace();
		} catch (IOException ex) {
			ex.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 创建ZIP文件
	 *
	 * @param sourcePath
	 *            文件或文件夹路径
	 * @param zipPath
	 *            生成的zip文件存在路径(包括文件名)
	 */
	public static void createZip(String sourcePath, String zipPath) {
		FileOutputStream fos = null;
		ZipOutputStream zos = null;
		try {
			fos = new FileOutputStream(zipPath);
			zos = new ZipOutputStream(fos);
			writeZip(new File(sourcePath), "", zos);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} finally {
			try {
				if (zos != null) {
					zos.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	private static void writeZip(File inFile, String parentPath,
			ZipOutputStream zipOutStream) {
		if (inFile.exists()) {
			if (inFile.isDirectory()) {
				parentPath += inFile.getName() + File.separator;
				File[] files = inFile.listFiles();
				for (File file : files) {
					writeZip(file, parentPath, zipOutStream);
				}
			} else {
				FileInputStream fileInStream = null;
				try {
					fileInStream = new FileInputStream(inFile);
					ZipEntry entry = new ZipEntry(parentPath + inFile.getName());
					zipOutStream.putNextEntry(entry);

					byte[] buff = new byte[1024];
					int len;
					while ((len = fileInStream.read(buff)) != -1) {
						zipOutStream.write(buff, 0, len);
						zipOutStream.flush();
					}

				} catch (FileNotFoundException e) {
					e.printStackTrace();
				} catch (IOException e) {
					e.printStackTrace();
				} finally {
					try {
						if (fileInStream != null) {
							fileInStream.close();
						}
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
		}
	}

	public static void main(String[] args) {
		String oldPath = "F:/test/ddd/";
		String newPath = "F:/test/ccc.zip";
		// ToolOfZip.createZip(oldPath, newPath);
		//ToolOfZip.unZip(newPath, null, false);
		System.out.println();
		System.out.println("---------ok----------");
	}
}

java 压缩和解压zip包,布布扣,bubuko.com

时间: 2024-12-16 11:51:16

java 压缩和解压zip包的相关文章

【转】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压缩和解压字符串,Byte数组,String

在网上找到的压缩解压的工具类,可以压缩String字符串 /*** * 压缩GZip * * @param data * @return */ public static byte[] gZip(byte[] data) { byte[] b = null; try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); GZIPOutputStream gzip = new GZIPOutputStream(bos); gzip.w

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

java程序压缩和解压zip文件

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

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

java zip压缩和解压(支持中文)

package com.xeon.mis.utils; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.util.Enumeration; impor

ruby利用Zip Gem写一个简单的压缩和解压的小工具

在UNIX下的我们怎么会沦落到用ruby写压缩和解压工具呢?直接上shell啊!但是请允许本猫这次可耻的用ruby来玩玩吧!其实ruby GEM中有很多压缩解压包,我选的是Zip,也许是因为名字符合KISS原则吧!不过在编写中发现Zip中的某些类没有文档中所说明的实例方法,也许在某个平台上还未实现?? 话先说到前头,这个工具如果解压有重名文件的情况会直接覆盖原文件而不会有任何提示!测试时务必注意,如果造成一些文件丢失可别怪本猫啊! 代码也考虑到多文件的情况,如果是压缩多文件则默认会单独压缩每一个

工具类-解压zip包和压缩照片

    由于目前系统在服务器上的资料占用空间太大.查了原因之后发现时因为照片没有经过压缩.但是所有照片都在zip包里,比较犯愁.于是写了如下的工具类.主要实现的功能是:扫描一个文件夹下的所有zip包,然后把zip包进行解压.拿到所有的照片.如果照片大于300KB就进行等比例压缩.压缩之后重新打包成zip包.替换掉原来的zip包.     并且可以可有选择是否等比压缩,压缩比例等.代码如下: filetest类: package daoimpl; import java.io.BufferedIn

java 解压 zip 包并删除

需求是这样的,  在服务器上有 运营上传的zip 包,内容是用户的照片,我需要做的是 获取这些照片上传,并保存到 数据库. 这里面的 上传照片,保存数据库都不难,主要问题是解压zip包,和删除zip 包,以及 解压后的文件. 之前在网上找的解压的文件的代码,都存在同一个问题,就是解压之后,无法删除 zip 包.查百度说是 资源占用,可是我已经把所有的流都关闭了哇. 我把解压和删除分成两部分用 jUnit  测试:   第一次测试解压,并不删除包:第二次只删除包.我发现,解压方法和删除方法在同一个