当前位置:编程学习 > JAVA >>

压缩和解压的工具类(ant-1.8.4.jar)

使用ant-1.8.4.jar中的org.apache.tools.zip包进行文件的文件压缩和解压,主要使用该jar包中的以下类:
org.apache.tools.zip.ZipEntry;
org.apache.tools.zip.ZipFile;
org.apache.tools.zip.ZipOutputStream;
 下面是我写的压缩和解压文件的工具类,并附测试,请大家为我debug:
[java] 
import java.io.BufferedInputStream; 
import java.io.BufferedOutputStream; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Enumeration; 
import java.util.List; 
import java.util.zip.CRC32; 
import java.util.zip.CheckedOutputStream; 
import java.util.zip.Deflater; 
import java.util.zip.ZipException; 
 
import org.apache.tools.zip.ZipEntry; 
import org.apache.tools.zip.ZipFile; 
import org.apache.tools.zip.ZipOutputStream; 
 
/**
  * @Description: 
  *     压缩和解压工具
 */ 
public class ZipUtil { 
 
    /**
      * @Description: 
      *     压缩文件
      * @param sourcePath 将要压缩的文件或目录的路径,请使用绝对路径
      * @param zipPath 生成压缩文件的路径,请使用绝对路径。如果该路径以“.zip”为结尾,
      *         则压缩文件的名称为此路径;如果该路径不以“.zip”为结尾,则压缩文件的名称
      *         为该路径加上将要压缩的文件或目录的名称,再加上以“.zip”结尾
      * @param encoding 压缩编码
      * @param comment 压缩注释
     */ 
    public static void compress(String sourcePath, String zipPath, String encoding, String comment) 
            throws FileNotFoundException, IOException { 
        // 判断要压缩的文件是否存在 
        File sourceFile = new File(sourcePath); 
        if (!sourceFile.exists() || (sourceFile.isDirectory() && sourceFile.list().length == 0)) { 
            throw new FileNotFoundException("要压缩的文件或目录不存在,或者要压缩的目录为空"); 
        } 
        // 设置压缩文件路径,默认为将要压缩的路径的父目录为压缩文件的父目录 
        if (zipPath == null || "".equals(zipPath)) { 
            String sourcePathName = sourceFile.getAbsolutePath(); 
            int index = sourcePathName.lastIndexOf("."); 
            zipPath = (index > -1 ? sourcePathName.substring(0, index) : sourcePathName) + ".zip"; 
        } else { 
            // 如果压缩路径为目录,则将要压缩的文件或目录名做为压缩文件的名字,这里压缩路径不以“.zip”为结尾则认为压缩路径为目录 
            if(!zipPath.endsWith(".zip")){ 
                // 如果将要压缩的路径为目录,则以此目录名为压缩文件名;如果将要压缩的路径为文件,则以此文件名(去除扩展名)为压缩文件名 
                String fileName = sourceFile.getName(); 
                int index = fileName.lastIndexOf("."); 
                zipPath = zipPath + File.separator + (index > -1 ? fileName.substring(0, index) : fileName) + ".zip"; 
            } 
        } 
        // 设置解压编码 
        if (encoding == null || "".equals(encoding)) { 
            encoding = "GBK"; 
        } 
        // 要创建的压缩文件的父目录不存在,则创建 
        File zipFile = new File(zipPath); 
        if (!zipFile.getParentFile().exists()) { 
            zipFile.getParentFile().mkdirs(); 
        } 
        // 创建压缩文件输出流 
        FileOutputStream fos = null; 
        try { 
            fos = new FileOutputStream(zipPath); 
        } catch (FileNotFoundException e) { 
            if (fos != null) { 
                try{ fos.close(); } catch (Exception e1) {} 
            } 
        } 
        // 使用指定校验和创建输出流 
        CheckedOutputStream csum = new CheckedOutputStream(fos, new CRC32()); 
        // 创建压缩流 
        ZipOutputStream zos = new ZipOutputStream(csum); 
        // 设置编码,支持中文 
        zos.setEncoding(encoding); 
        // 设置压缩包注释 
        zos.setComment(comment); 
        // 启用压缩 
        zos.setMethod(ZipOutputStream.DEFLATED); 
        // 设置压缩级别为最强压缩 
        zos.setLevel(Deflater.BEST_COMPRESSION); 
        // 压缩文件缓冲流 
        BufferedOutputStream bout = null; 
        try { 
            // 封装压缩流为缓冲流 
            bout = new BufferedOutputStream(zos); 
补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,