首页 > 代码库 > 正确的 zip 压缩与解压代码

正确的 zip 压缩与解压代码

网上流传的zip压缩与解压 的代码有很大的问题 虽然使用了ant进行压缩与解压,但是任务的流程还是用的java.util.zip 的方式写的,我在使用的过程中遇到了压缩的目录结构有误,甚至出现不同解压软件显示的目录结构不同的窘境。

下面给出使用org.apache.tools.ant.taskdefs.Zip;和org.apache.tools.ant.taskdefs.Expand 的压缩和解压过程。

import java.io.File;import org.apache.tools.ant.BuildException;import org.apache.tools.ant.Project;import org.apache.tools.ant.taskdefs.Expand;import org.apache.tools.ant.taskdefs.Zip;import org.apache.tools.ant.types.FileSet;public class Zipper {	public final static String encoding = "GBK";	// 压缩	public static void zip(String srcPathname, String zipFilepath)			throws BuildException, RuntimeException {		File file = new File(srcPathname);		if (!file.exists())			throw new RuntimeException("source file or directory "					+ srcPathname + " does not exist.");		Project proj = new Project();		FileSet fileSet = new FileSet();		fileSet.setProject(proj);		// 判断是目录还是文件		if (file.isDirectory()) {			fileSet.setDir(file);			// ant中include/exclude规则在此都可以使用			// 比如:			// fileSet.setExcludes("**/*.txt");			// fileSet.setIncludes("**/*.xls");		} else {			fileSet.setFile(file);		}		Zip zip = new Zip();		zip.setProject(proj);		zip.setDestFile(new File(zipFilepath));		zip.addFileset(fileSet);		zip.setEncoding(encoding);		zip.execute();	}	// 解压缩	public static void unzip(String zipFilepath, String destDir)			throws BuildException, RuntimeException {		if (!new File(zipFilepath).exists())			throw new RuntimeException("zip file " + zipFilepath					+ " does not exist.");		Project proj = new Project();		Expand expand = new Expand();		expand.setProject(proj);		expand.setTaskType("unzip");		expand.setTaskName("unzip");		expand.setEncoding(encoding);		expand.setSrc(new File(zipFilepath));		expand.setDest(new File(destDir));		expand.execute();	}	public static void main(String []args){		unzip("D:\\123.zip","D:\\123");		zip("D:\\upload","D:\\upload.zip");	}}