compress 解压缩_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > compress 解压缩

compress 解压缩

 2012/3/14 9:58:41  chenpenghui  程序员俱乐部  我要评论(0)
  • 摘要:主要用到了apachcommons里的compress包。下载:http://commons.apache.org/compress/download_compress.cgi实现了打包和解压缩的功能。1.打包功能:主要是用了递归的方法。如果打包文件的话,则给这个文件外加一个文件夹,这里用zip文件名当一个文件夹,再进行打包。和xp打包文件然后解压的效果差不多。文章用了IOUtils.copy其实就流的读写,只不过这样代码稍微简单的。2.解压:最主要的是要判断压缩包里的东西是文件,还是文件夹
  • 标签:压缩 解压缩

主要用到了apach commons里的compress包。下载:http://commons.apache.org/compress/download_compress.cgi

实现了打包和解压缩的功能。

1.打包功能:主要是用了递归的方法。如果打包文件的话,则给这个文件外加一个文件夹,这里用zip文件名当一个文件夹,再进行打包。和xp打包文件然后解压的效果差不多。文章用了IOUtils.copy其实就流的读写,只不过这样代码稍微简单的。

2.解压:最主要的是要判断压缩包里的东西是文件,还是文件夹,分开来处理就可以了。这个只能解一层,如果有需要可以递归下去继续解压缩。代码如下,请指点。package zip;

import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Enumeration;

import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.compress.archivers.zip.ZipFile;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;

public class CompressUtils {
	private OutputStream out = null;
	private BufferedOutputStream bos = null;
	private ZipArchiveOutputStream zaos = null;


	public static void main(String[] args) throws FileNotFoundException, Exception {
		CompressUtils compressUtils = new CompressUtils();
		compressUtils.zip("c:/abc.zip", "d:/7767test.xls", "");
//		compressUtils.unzip("c:/abc.zip", "d:/a/g/");
	}

	public void close() throws Exception {
		zaos.flush();
		zaos.close();
		bos.flush();
		bos.close();
		out.flush();
		out.close();
	}
	/**
	 * 
	 * @param zipPath
	 *            得到的zip文件的名称(含路径)
	 * @param filePath
	 *            需要压缩的文件所在的目录
	 * @param pathName
	 *            压缩到pathName文件夹下
	 * @throws Exception
	 */
	public void zip(String zipPath, String filePath, String pathName) throws Exception {
		File f = new File(zipPath);
		out = new FileOutputStream(f);
		bos = new BufferedOutputStream(out);
		zaos = new ZipArchiveOutputStream(bos);
		zaos.setEncoding("GBK");
		if (!"".equals(pathName) && null != pathName) {
			pathName = pathName + File.separator;
		} else {
			pathName = f.getName().substring(0, f.getName().length() - 4) + File.separator;
		}
		zip(zaos, filePath, pathName);
		close();
	}
	/**
	 * 
	 * @param zaos
	 *            流
	 * @param filePath
	 *            需要打包的目录
	 * @param pathName
	 *            打包到pathName的目录下
	 * @throws FileNotFoundException
	 * @throws IOException
	 */

	public void zip(ZipArchiveOutputStream zaos, String filePath, String pathName) throws FileNotFoundException, IOException {

		File file2zip = new File(filePath);
		if (file2zip.isFile()) {
			zaos.putArchiveEntry(new ZipArchiveEntry(pathName + file2zip.getName()));
			IOUtils.copy(new FileInputStream(file2zip.getAbsolutePath()), zaos);
			zaos.closeArchiveEntry();
		} else {
			File[] files = file2zip.listFiles();
			if (files == null || files.length < 1) {
				return;
			}
			for (int i = 0; i < files.length; i++) {
				if (files[i].isDirectory()) {
					zip(zaos, files[i].getAbsolutePath(), pathName + files[i].getName() + File.separator);
				} else {
					zaos.putArchiveEntry(new ZipArchiveEntry(pathName + files[i].getName()));
					IOUtils.copy(new FileInputStream(files[i].getAbsolutePath()), zaos);
					zaos.closeArchiveEntry();
				}
			}
		}
	}
	/**
	 * 
	 * @param zipFileName
	 *            压缩文件名
	 * @param zip2FileName
	 *            解压路径
	 * @throws IOException
	 */
	public void unzip(String zipFileName, String zip2FileName) throws IOException {

		File zipfile = new File(zipFileName);
		try {
			zip2FileName = zip2FileName + File.separator;
			FileUtils.forceMkdir(new File(zip2FileName));
			ZipFile zf = new ZipFile(zipfile, "GBK");
			Enumeration zipArchiveEntrys = zf.getEntries();
			while (zipArchiveEntrys.hasMoreElements()) {
				ZipArchiveEntry zipArchiveEntry = (ZipArchiveEntry) zipArchiveEntrys.nextElement();
				if (zipArchiveEntry.isDirectory()) {
					FileUtils.forceMkdir(new File(zip2FileName + zipArchiveEntry.getName() + File.separator));
				} else {
					IOUtils.copy(zf.getInputStream(zipArchiveEntry), FileUtils.openOutputStream(new File(zip2FileName + zipArchiveEntry.getName())));
				}
			}
		} catch (Exception e) {
			throw new IOException("找不到文件:" + zipFileName);
		}
	}

}
?
发表评论
用户名: 匿名