网上流传的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");}
}