码迷,mamicode.com
首页 > 编程语言 > 详细

java 压缩和解压zip包

时间:2017-04-30 18:44:14      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:finally   not   absolute   cep   tput   pat   copy   dir   static   

网上有关压缩和解压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包

标签:finally   not   absolute   cep   tput   pat   copy   dir   static   

原文地址:http://www.cnblogs.com/clnchanpin/p/6789907.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!