欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java 解压 zip文件

程序员文章站 2022-04-28 15:38:04
...
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");
		}

	}

}

相关标签: 杂谈