`
竹临仙
  • 浏览: 37859 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

文件压缩

阅读更多
package com.email.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;

public class ZipUtils {
 
       private String comment = ""; 
       public void setComment(String comment) { 
          this.comment = comment; 
       } 
    
      /**
        * @param src:要压缩的目录
        * @param dest:压缩文件存档
        * @throws Exception
        */ 
       public void zip(String src, String dest, List filter) throws Exception { 
           ZipOutputStream out = new ZipOutputStream(new FileOutputStream(dest)); 
           File srcFile = new File(src); 
           zip(out,srcFile,"",filter); 
           out.close(); 
       } 
        
       /**
        * @param out
        * @param srcFile
        * @param base:根路径
        * @param filter:过滤
        * @throws Exception
        */ 
       public void zip(ZipOutputStream out, File srcFile, String base, List filter) throws Exception { 
           if(srcFile.exists()==false) { 
               throw new Exception("压缩目录不存在!"); 
           } 
            
           if(srcFile.isDirectory()) { 
               File[] files = srcFile.listFiles(); 
               base = base.length() == 0 ? "" : base + "/"; 
               if (isExist(base, filter)) { 
                   out.putNextEntry(new ZipEntry(base)); 
               } 
               for(int i=0; i<files.length; i++) { 
                   zip(out,files[i],base + files[i].getName(),filter); 
               } 
           } else { 
               if (isExist(base, filter)) { 
                   base = base.length() == 0 ? srcFile.getName() : base ; 
                   ZipEntry zipEntry = new ZipEntry(base); 
                   zipEntry.setComment(comment); 
                   out.putNextEntry(zipEntry); 
                   FileInputStream in = new FileInputStream(srcFile); 
                   int length = 0; 
                   byte[] b = new byte[1024]; 
                   while((length=in.read(b,0,1024))!=-1) { 
                       out.write(b,0,length); 
                   } 
                   in.close(); 
               } 
           } 
       } 
        
      /**
  .      * 过滤出要压缩的文件夹
        * @param base
        * @param list
        * @return
        */ 
       public boolean isExist(String base, List list) { 
           if (list != null && !list.isEmpty()) { 
               for (int i = 0; i < list.size(); i++) { 
                   if (base.indexOf((String) list.get(i)) >= 0) { 
                       return true; 
                   } 
               } 
           } 
           return false; 
       } 
        
       /**
        * @param srcFile:压缩文件路径
        * @param dest:解压到的目录
        * @param deleteFile:解压完成后是否删除文件
       * @throws Exception
        */ 
       public void unZip(String srcFile,String dest,boolean deleteFile)  throws Exception { 
           File file = new File(srcFile); 
           if(!file.exists()) { 
               throw new Exception("解压文件不存在!"); 
          } 
          ZipFile zipFile = new ZipFile(file); 
          Enumeration e = zipFile.getEntries(); 
         while(e.hasMoreElements()) { 
              ZipEntry zipEntry = (ZipEntry)e.nextElement(); 
              if(zipEntry.isDirectory()) { 
                  String name = zipEntry.getName(); 
                  name = name.substring(0,name.length()-1); 
                 File f = new File(dest + name); 
                  f.mkdirs(); 
             } else { 
                  File f = new File(dest + zipEntry.getName()); 
                  f.getParentFile().mkdirs(); 
                  f.createNewFile(); 
                  InputStream is = zipFile.getInputStream(zipEntry); 
                  FileOutputStream fos = new FileOutputStream(f); 
                  int length = 0; 
                  byte[] b = new byte[1024]; 
                  while((length=is.read(b, 0, 1024))!=-1) { 
                      fos.write(b, 0, length); 
                  } 
                 is.close(); 
                  fos.close(); 
              } 
          } 
           
          if (zipFile != null) { 
              zipFile.close(); 
          } 
           
          if(deleteFile) { 
              file.deleteOnExit(); 
          } 
      } 
       
      /**
       * 获取Zip文件的注释信息
       * @param srcFile
       * @return
       */ 
      public static String getZipComment(String srcFile) { 
          String comment = ""; 
          try { 
              ZipFile zipFile = new ZipFile(srcFile); 
              Enumeration e = zipFile.getEntries(); 
   
              while (e.hasMoreElements()) { 
                  ZipEntry ze = (ZipEntry) e.nextElement(); 
   
                  comment = ze.getComment(); 
                  if (comment != null && !comment.equals("") 
                          && !comment.equals("null")) { 
                      break; 
                  } 
              } 
   
              zipFile.close(); 
          } catch (Exception e) { 
              System.out.println("获取zip文件注释信息失败:" + e.getMessage()); 
          } 
   
          return comment; 
      } 
   
      public static void main(String[] args) throws Exception { 
//           long begin = System.currentTimeMillis(); 
//           ZipUtils zu = new ZipUtils(); 
////           List<String> filter = new ArrayList<String>();
////           File f = new File("f:/手册");
////           for(File ff : f.listFiles()){
////           //System.out.println(ff.getName());
////           filter.add(ff.getName());
////           }
//          
//           //filter.add("《JavaScript 语言参考》中文版.chm");
//           //filter.add("CSS 2.0样式表中文手册.chm");
//           //filter.add("3RDPARTY"); 
//           //filter.add("BANNER.GIF"); 
//           //zu.setComment("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); 
//          // zu.zip("f:/手册", "f:/手册.zip",filter); 
//           //System.out.println(ZipUtils.getZipComment("c:/hh.zip")); 
//           //new ZipUtils().unZip("f:/手册.zip", "f:/ccc/", true); 
//           //File f = new File("c:/hh.zip"); 
//           //f.deleteOnExit(); 
//           long end = System.currentTimeMillis(); 
//          System.out.println(end-begin); 
      }
}
分享到:
评论

相关推荐

    文件压缩解压缩

    在IT行业中,文件压缩与解压缩是日常工作中常见的操作,特别是在数据传输、存储优化和软件分发等领域。这里我们主要探讨的是一个简单的工具类,它支持zip、rar、tar等多种格式的压缩和解压缩功能,并且经过实际测试...

    教你如何将1G文件压缩成1M

    知识点:将1G文件压缩至1M的技巧与文件压缩原理 一、文件压缩基础知识 文件压缩技术在信息技术领域有着广泛的应用,它能够减少文件占用的存储空间,提高传输效率,尤其是在网络带宽有限的情况下,压缩技术尤为重要...

    JAVA文件压缩与解压缩实践(源代码+论文)

    3. **GZIP格式**:GZIP是一种文件压缩格式,主要用于单个文件的压缩。Java中的`GZIPOutputStream`和`GZIPInputStream`用于对文件进行GZIP压缩和解压缩。 4. **源代码实现**:实践中提供的源代码展示了如何使用Java ...

    Protel99库文件压缩工具

    "Protel99库文件压缩工具"就是为了应对这一问题而出现的实用程序。 该工具的主要功能是压缩Protel99的PCB库文件,以减小文件大小,但同时保持文件的完整性和可使用性。这通常通过去除不必要的空白区域、优化数据...

    基于哈夫曼树的文件压缩和解压(QT可视化界面)

    《基于哈夫曼树的文件压缩与解压技术在QT可视化界面中的实现》 哈夫曼编码是一种数据压缩算法,其核心是构建哈夫曼树,通过对数据出现频率的统计,构建出一棵特殊的二叉树——哈夫曼树,使得出现频率高的字符具有较...

    将文件压缩的源码

    在标题提到的“将文件压缩的源码”中,我们可以深入探讨文件压缩的基本原理、常用的压缩算法以及如何通过编程实现文件压缩。 首先,我们要了解文件压缩的原理。文件中的数据通常包含大量的冗余信息,比如重复的字符...

    用哈夫曼编码实现文件压缩(代码+报告)

    数据结构课程设计用哈夫曼编码实现文件压缩: 一、实验题目: 用哈夫曼编码实现文件压缩 二、实验目的: 1、了解文件的概念。 2、掌握线性链表的插入、删除等算法。 3、掌握Huffman树的概念及构造方法。 4、掌握...

    多文件压缩与解压程序 实验报告

    1. 分析给出的多文件打包/解包程序MyZip和单文件压缩程序Compress,将程序MyZip改写为一个能够处理多文件压缩/解压的控制台程序,可利用命令行参数控制其完成如下功能: 1. 将命令行参数指定的一组文件压缩为一个...

    java多文件压缩成zip文件并实现下载

    在Java编程中,将多个文件压缩成一个ZIP文件并实现下载是一个常见的任务,尤其是在处理大量数据或文件分发时。这个过程涉及到Java的I/O流、压缩和HTTP响应的使用。下面将详细介绍如何实现这个功能。 首先,我们需要...

    图形文件压缩工具

    在IT领域,图形文件压缩是图像处理和数据存储的一个重要环节。这主要涉及到如何在保持图像质量的同时,减少文件的存储空间。以下是一些关于图形文件压缩的重要知识点: 1. **压缩原理**:图像文件通常包含大量的...

    node.js 将多个js文件压缩到一个文件

    node.js 将多个js文件压缩到一个文件 安装 node.js、java环境 1、org 原始文件 2、out 输出文件目录 使用方法 1、将原始js 复制到org目录 2、编辑nodescript.js文件,按顺序配置需要压缩的文件列表 var ...

    易语言模块文件压缩专家.rar

    《易语言模块文件压缩专家》是一款专为易语言开发者设计的高效、便捷的文件压缩工具。易语言,作为中国本土的编程语言,以其简洁的语法和丰富的库支持,深受初级和中级程序员的喜爱。这款模块文件压缩专家正是为了...

    简单的文件压缩程序

    在IT领域,文件压缩是一种常见的数据管理技术,用于减少文件的存储空间,提高传输效率。本文将详细讨论“简单的文件压缩程序”的实现及其工作原理,同时关注如何将多个文件压缩到一个文件中,并能自由设定目标文件的...

    1G的文件压缩成1M的方法.rar

    1G的文件压缩成1M的方法1G的文件压缩成1M的方法.rar1G的文件压缩成1M的方法.rar1G的文件压缩成1M的方法.rar1G的文件压缩成1M的方法.rar1G的文件压缩成1M的方法.rar1G的文件压缩成1M的方法.rar1G的文件压缩成1M的方法...

    基于哈夫曼编码的文件压缩解压程序的C语言实现

    在C语言中实现基于哈夫曼编码的文件压缩解压程序,需要深入理解哈夫曼编码的基本原理以及C语言编程技巧。 首先,哈夫曼编码是根据字符出现频率进行编码的一种方法。它通过构建一棵特殊的二叉树——哈夫曼树(也称为...

    Linux系统的文件压缩和解压缩方法.pdf

    Linux系统的文件压缩和解压缩方法.pdf Linux系统的文件压缩和解压缩方法是Linux系统中非常重要的一部分。了解Linux系统的文件压缩和解压缩方法对提高用户使用Linux系统的能力非常有帮助。本文将对Linux系统的文件...

    基于Huffman树的文件压缩C源码

    在IT领域,文件压缩是一种常见的数据处理技术,用于减少存储空间和提高传输效率。Huffman编码是文件压缩中的一种高效算法,由David A. Huffman在1952年提出,主要用于无损数据压缩。本篇将详细介绍基于Huffman树的...

    用一条命令将一个目录下的所有文件压缩成CAB包

    ### 使用单条命令将目录下所有文件压缩成CAB包的方法 在IT行业中,文件管理和压缩是一项非常重要的技能。特别是对于系统管理员和技术支持人员来说,能够有效地管理文件和目录是日常工作中不可或缺的一部分。本文将...

    1G的文件压缩成1M的方法

    1G的文件压缩成1M的方法,很多网上下载的文件只有300MB或400MB,但是解压后,居然可以达到2GB甚至更多,也许你会奇怪,为什么你用WinRAR压缩同样的文件,就没有这样的压缩效果呢?其实这是因为这些文件是用多款不同...

    适合练手、课程设计、毕业设计的Java项目源码:文件压缩与解压缩实践(源代码+论文).rar

    适合练手、课程设计、毕业设计的Java项目源码:文件压缩与解压缩实践(源代码+论文).rar 适合练手、课程设计、毕业设计的Java项目源码:文件压缩与解压缩实践(源代码+论文).rar 适合练手、课程设计、毕业设计的Java...

Global site tag (gtag.js) - Google Analytics