java 压缩和解压zip包

Posted clnchanpin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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包的主要内容,如果未能解决你的问题,请参考以下文章

Java中往zip压缩包追加文件

java解压zip文件至指定文件夹

java 压缩和解压zip包

javazip压缩包过大解压失败

用Java制作打rar压缩包程序

请大神帮忙解决一个用java解压缩一个zip压缩格式字节流中文内容乱码问题!