本文主要是介绍java实现zip压缩文件/文件夹,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
由于java.util.zip.ZipOutputStream有中文乱码问题,所以采用org.apache.tools.zip.ZipOutputStream。以下是代码:
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream; import org.apache.log4j.Logger;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream; /** * @ClassName: ZipCompressor * @CreateTime Apr 28, 2013 1:12:16 PM * @author : Mayi * @Description: 压缩文件的通用工具类-采用org.apache.tools.zip.ZipOutputStream实现,较复杂。 * */
public class ZipCompressor { private Logger logger = Logger.getLogger(ZipCompressor.class); static final int BUFFER = 8192; private File zipFile; /** * 压缩文件构造函数 * @param pathName 压缩的文件存放目录 */ public ZipCompressor(String pathName) { zipFile = new File(pathName); } /** * 执行压缩操作 * @param srcPathName 被压缩的文件/文件夹 */ public void compressExe(String srcPathName) { File file = new File(srcPathName); if (!file.exists()){ throw new RuntimeException(srcPathName + "不存在!"); } try { FileOutputStream fileOutputStream = new FileOutputStream(zipFile); CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,new CRC32()); ZipOutputStream out = new ZipOutputStream(cos); String basedir = ""; compressByType(file, out, basedir); out.close(); } catch (Exception e) { e.printStackTrace(); logger.error("执行压缩操作时发生异常:"+e); throw new RuntimeException(e); } } /** * 判断是目录还是文件,根据类型(文件/文件夹)执行不同的压缩方法 * @param file * @param out * @param basedir */ private void compressByType(File file, ZipOutputStream out, String basedir) { /* 判断是目录还是文件 */ if (file.isDirectory()) { logger.info("压缩:" + basedir + file.getName()); this.compressDirectory(file, out, basedir); } else { logger.info("压缩:" + basedir + file.getName()); this.compressFile(file, out, basedir); } } /** * 压缩一个目录 * @param dir * @param out * @param basedir */ private void compressDirectory(File dir, ZipOutputStream out, String basedir) { if (!dir.exists()){ return; } File[] files = dir.listFiles(); for (int i = 0; i < files.length; i++) { /* 递归 */ compressByType(files[i], out, basedir + dir.getName() + "/"); } } /** * 压缩一个文件 * @param file * @param out * @param basedir */ private void compressFile(File file, ZipOutputStream out, String basedir) { if (!file.exists()) { return; } try { BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); ZipEntry entry = new ZipEntry(basedir + file.getName()); out.putNextEntry(entry); int count; byte data[] = new byte[BUFFER]; while ((count = bis.read(data, 0, BUFFER)) != -1) { out.write(data, 0, count); } bis.close(); } catch (Exception e) { throw new RuntimeException(e); } }
}
后来发现原来可以用ant中的org.apache.tools.ant.taskdefs.Zip来实现,更加简单。
import java.io.File; import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Zip;
import org.apache.tools.ant.types.FileSet; /** * @ClassName: ZipCompressorByAnt * @CreateTime Apr 28, 2013 1:23:45 PM * @author : Mayi * @Description: 压缩文件的通用工具类-采用ant中的org.apache.tools.ant.taskdefs.Zip来实现,更加简单。 * */
public class ZipCompressorByAnt { private File zipFile; /** * 压缩文件构造函数 * @param pathName 最终压缩生成的压缩文件:目录+压缩文件名.zip */ public ZipCompressorByAnt(String finalFile) { zipFile = new File(finalFile); } /** * 执行压缩操作 * @param srcPathName 需要被压缩的文件/文件夹 */ public void compressExe(String srcPathName) { File srcdir = new File(srcPathName); if (!srcdir.exists()){ throw new RuntimeException(srcPathName + "不存在!"); } Project prj = new Project(); Zip zip = new Zip(); zip.setProject(prj); zip.setDestFile(zipFile); FileSet fileSet = new FileSet(); fileSet.setProject(prj); fileSet.setDir(srcdir); //fileSet.setIncludes("**/*.java"); //包括哪些文件或文件夹 eg:zip.setIncludes("*.java"); //fileSet.setExcludes(...); //排除哪些文件或文件夹 zip.addFileset(fileSet); zip.execute(); }
}
测试一下
package net.szh.zip; public class TestZip { public static void main(String[] args) { ZipCompressor zc = new ZipCompressor("E:\\szhzip.zip"); zc.compress("E:\\test"); ZipCompressorByAnt zca = new ZipCompressorByAnt("E:\\szhzipant.zip"); zca.compress("E:\\test"); }
}
这篇关于java实现zip压缩文件/文件夹的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!