java 解压 zip文件

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;

/**
 * 
 * 
 * @author Administrator
 *
 */
public class CompressFile {
	private static CompressFile instance = new CompressFile();

	private CompressFile() {
	}

	public static CompressFile getInstance() {
		return instance;
	}

	/**
	 * 解压zip或者rar包的内容到指定的目录下,可以处理其文件夹下包含子文件夹的情况
	 * 
	 * @param zipFilename
	 *            要解压的zip或者rar包文件
	 * @param outputDirectory
	 *            解压后存放的目录
	 */
	public synchronized boolean unzip(String zipFilename, String outputDirectory) {
		Boolean flag = false;
		File outFile = new File(outputDirectory);
		// 文件输出
		if (!outFile.exists()) {
			outFile.mkdirs();
		}
		ZipFile zipFile = null;
		ZipEntry zipEntry = null;

		try {
			zipFile = new ZipFile(zipFilename, "gbk");
			Enumeration en = zipFile.getEntries();

			while (en.hasMoreElements()) {
				InputStream in = null;
				FileOutputStream out = null;
				zipEntry = (ZipEntry) en.nextElement();
				if (zipEntry.isDirectory()) {
					// mkdir directory
					//String dirName = zipEntry.getName();
					// System.out.println("=dirName is:=" + dirName + "=end=");
					//dirName = dirName.substring(0, dirName.length() - 1);
					//File f = new File(outFile.getPath() + File.separator + dirName);
					//f.mkdirs();
				} else {
					// unzip file
					String strFilePath = outFile.getPath() + File.separator + zipEntry.getName();
					File f = new File(strFilePath);

					// the codes remedified by can_do on 2010-07-02 =begin=
					// /begin/
					// 判断文件不存在的话,就创建该文件所在文件夹的目录
//					if (!f.exists()) {
//						String[] arrFolderName = zipEntry.getName().split("/");
//						String strRealFolder = "";
//						for (int i = 0; i < (arrFolderName.length - 1); i++) {
//							strRealFolder += arrFolderName[i] + File.separator;
//						}
//						strRealFolder = outFile.getPath() + File.separator + strRealFolder;
//						File tempDir = new File(strRealFolder);
//						// 此处使用.mkdirs()方法,而不能用.mkdir()
//						tempDir.mkdirs();
//					}
					// /end///
					// the codes remedified by can_do on 2010-07-02 =end=
					try {
						f.createNewFile();
						in = zipFile.getInputStream(zipEntry);
						out = new FileOutputStream(f);
						int c;
						byte[] by = new byte[BUFFEREDSIZE];
						while ((c = in.read(by)) != -1) {
							out.write(by, 0, c);
						}
						out.flush();
					} finally {
						if (in != null)
							try {
								in.close();
							} catch (Exception e) {
								e.printStackTrace();
							}
						if (out != null) {
							try {
								out.close();
							} catch (Exception e) {
								e.printStackTrace();
							}
						}
					}
				}
			}
			flag = true;
		} catch (IOException e1) {
			e1.printStackTrace();
			
		} finally {
			try {
				if (zipFile != null)
					zipFile.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		return flag;

	}

	private static final int BUFFEREDSIZE = 1024;

	public static void main(String[] args) {
		CompressFile bean = new CompressFile();

		boolean isZip = false;
		if (isZip) {
			// bean.zip("E:\\20100707", "d:/test_rar.zip");
		} else {
			bean.unzip("C:\\Users\\Administrator\\Desktop\\Desktop.zip", "D:/temp");
		}

	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值