灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3027回复:0

Zip文件压缩类

楼主#
更多 发布于:2012-09-08 09:44


public class ZipFileUtil {
    private final static int BUFFER=2048;
     /**
      * 解压zip文件
      *
      * @param zipFilePath
      *            zip文件绝对路径
      * @param unzipDirectory
      *            解压到的目录
      * @throws Exception
      */

     @SuppressWarnings("unchecked")
    public static boolean unzip(String zipFilePath, String unzipDirectory)
     throws Exception {
         boolean flag=true;
         try{
          // 创建文件对象
          File file = new File(zipFilePath);
          // 创建zip文件对象
          ZipFile zipFile = new ZipFile(file);
          // 创建本zip文件解压目录
          File unzipFile = new File(unzipDirectory + "/"
            + getSuffixName(file.getName()));
          if (unzipFile.exists())
           unzipFile.delete();
          unzipFile.mkdir();
          // 得到zip文件条目枚举对象
          Enumeration zipEnum = zipFile.getEntries();
          // 定义输入输出流对象
          InputStream input = null;
          OutputStream output = null;
          // 定义对象
          ZipEntry entry = null;
          // 循环读取条目
          while (zipEnum.hasMoreElements()) {
           // 得到当前条目
           entry = (ZipEntry) zipEnum.nextElement();
           String entryName = new String(entry.getName());
           // 用/分隔条目名称
           String names[] = entryName.split("\\/");
           int length = names.length;
           String path = unzipFile.getAbsolutePath();
           for (int v = 0; v < length; v++) {
            if (v < length - 1) { // 最后一个目录之前的目录
             path += "/" + names[v] + "/";
             createDir(path);
            } else { // 最后一个
             if (entryName.endsWith("/")) // 为目录,则创建文件夹
              createDir(unzipFile.getAbsolutePath() + "/" + entryName);
             else { // 为文件,则输出到文件
              input = zipFile.getInputStream(entry);
              output = new FileOutputStream(new File(unzipFile
                .getAbsolutePath()
                + "/" + entryName));
              byte[] buffer = new byte[1024 * 8];
              int readLen = 0;
              while ((readLen = input.read(buffer, 0, 1024 * 8)) != -1)
               output.write(buffer, 0, readLen);
              // 关闭流
              input.close();
              output.flush();
              output.close();
             }
            }
           }
          }}catch(Exception e){
              flag=false;
          }
          
        return flag;
    }
     /**
      * 创建目录
      *
      * @param path
      *            目录绝对路径名
      */
     static void createDir(String path) {
      File dir = new File(path);
      if (dir.exists() == false)
       dir.mkdir();
     }
     /**
      * 取得文件名,不包含后缀名
      *
      * @param name
      *            完整文件名 www.atcpu.com
      * @return 文件名(不包含后缀名)
      */
     static String getSuffixName(String name) {
      return name.substring(0, name.lastIndexOf("."));
     }
    /**
     *
     * 压缩多个文件
     *
     * @param zipFileName
     *            压缩后的文件名
     *
     * @param inputFiles 待压缩的文件列表
     *
     */
    public static boolean zipFile(String zipFileName, List<File> inputFiles){
        boolean test = true;
        try {
            BufferedInputStream origin = null;
            FileOutputStream dest = new FileOutputStream(zipFileName);
            ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(
                    dest));
            byte data[] = new byte[BUFFER];
            
            for (int i = 0; i < inputFiles.size(); i++) {
                File file=inputFiles.get(i);
                FileInputStream fi = new FileInputStream(file);
                origin = new BufferedInputStream(fi, BUFFER);
                ZipEntry entry = new ZipEntry(file.getName());
                out.putNextEntry(entry);
                int count;
                while ((count = origin.read(data, 0, BUFFER)) != -1) {
                    out.write(data, 0, count);
                }
                origin.close();
            }
            out.close();
        } catch (Exception e) {
            test = false;
            e.printStackTrace();
        }
        return test;
    }
    /**
     *
     * 压缩多个文件
     *
     * @param zipFileName
     *            压缩后的文件名
     *
     * @param inputFiles 待压缩的文件列表
     *
     */
    public static boolean zip(String zipFileName, List<String> inputFiles){
        boolean test = true;
        try {
            BufferedInputStream origin = null;
            FileOutputStream dest = new FileOutputStream(zipFileName);
            ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(
                    dest));
            byte data[] = new byte[BUFFER];
            
            for (int i = 0; i < inputFiles.size(); i++) {
                File file = new File(inputFiles.get(i));
                FileInputStream fi = new FileInputStream(file);
                origin = new BufferedInputStream(fi, BUFFER);
                ZipEntry entry = new ZipEntry(file.getName());
                out.putNextEntry(entry);
                int count;
                while ((count = origin.read(data, 0, BUFFER)) != -1) {
                    out.write(data, 0, count);
                }
                origin.close();
            }
            out.close();
        } catch (Exception e) {
            test = false;
            e.printStackTrace();
        }
        return test;
    }
}


摘自 zhu473105308


喜欢0 评分0
游客

返回顶部