• Java 实现文件压缩工具类


      1 package com.wdxc.util;
      2 import java.io.BufferedInputStream;  
      3 import java.io.File;  
      4 import java.io.FileInputStream;  
      5 import java.io.FileOutputStream;  
      6 import java.util.zip.CRC32;  
      7 import java.util.zip.CheckedOutputStream;  
      8 import java.util.zip.ZipEntry;
      9 import java.util.zip.ZipOutputStream;
     10 
     11 import org.apache.log4j.Logger;
     12 
     13 /**
     14  * zip文件压缩工具类
     15  * 
     16  * @author : wangbo
     17  */
     18 public class ZipCompressor {
     19     private Logger logger = Logger.getLogger(ZipCompressor.class);
     20     static final int BUFFER = 8192;  
     21     private File zipFile;  
     22     
     23     /**
     24      * 压缩文件构造函数
     25      * @param pathName 压缩的文件存放目录
     26      */
     27     public ZipCompressor(String pathName) {  
     28         zipFile = new File(pathName);  
     29     }  
     30   
     31     /**
     32      * 执行压缩操作
     33      * @param srcPathName 被压缩的文件/文件夹
     34      */
     35     public void compressExe(String srcPathName) {  
     36         File file = new File(srcPathName);  
     37         if (!file.exists()){
     38             throw new RuntimeException(srcPathName + "不存在!");  
     39         }
     40         try {  
     41             FileOutputStream fileOutputStream = new FileOutputStream(zipFile);  
     42             CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,new CRC32());  
     43             ZipOutputStream out = new ZipOutputStream(cos);
     44             
     45             String basedir = "";  
     46             compressByType(file, out, basedir);  
     47             out.close();
     48         } catch (Exception e) { 
     49             e.printStackTrace();
     50             logger.error("执行压缩操作时发生异常:"+e);
     51             throw new RuntimeException(e);  
     52         }  
     53     }  
     54   
     55     /**
     56      * 判断是目录还是文件,根据类型(文件/文件夹)执行不同的压缩方法
     57      * @param file 
     58      * @param out
     59      * @param basedir
     60      */
     61     private void compressByType(File file, ZipOutputStream out, String basedir) {  
     62         /* 判断是目录还是文件 */  
     63         if (file.isDirectory()) {  
     64             logger.info("压缩:" + basedir + file.getName());  
     65             this.compressDirectory(file, out, basedir);  
     66         } else {  
     67             logger.info("压缩:" + basedir + file.getName());  
     68             this.compressFile(file, out, basedir);  
     69         }  
     70     }  
     71   
     72     /**
     73      * 压缩一个目录
     74      * @param dir
     75      * @param out
     76      * @param basedir
     77      */
     78     private void compressDirectory(File dir, ZipOutputStream out, String basedir) {  
     79         if (!dir.exists()){
     80              return;  
     81         }
     82            
     83         File[] files = dir.listFiles();  
     84         for (int i = 0; i < files.length; i++) {  
     85             /* 递归 */  
     86             compressByType(files[i], out, basedir + dir.getName() + "/");  
     87         }  
     88     }  
     89   
     90     /**
     91      * 压缩一个文件
     92      * @param file
     93      * @param out
     94      * @param basedir
     95      */
     96     private void compressFile(File file, ZipOutputStream out, String basedir) {  
     97         if (!file.exists()) {  
     98             return;  
     99         }  
    100         try {  
    101             BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));  
    102             ZipEntry entry = new ZipEntry(basedir + file.getName());  
    103             out.putNextEntry(entry);  
    104             int count;  
    105             byte data[] = new byte[BUFFER];  
    106             while ((count = bis.read(data, 0, BUFFER)) != -1) {  
    107                 out.write(data, 0, count);  
    108             }  
    109             bis.close();  
    110         } catch (Exception e) {  
    111             throw new RuntimeException(e);  
    112         }  
    113     }  
    114     
    115     public static void main(String[] args) {  
    116         ZipCompressor zc = new  ZipCompressor("E:\szhzip.zip");
    117         zc.compressExe("E:\ftpdown");  
    118           
    119     }  
    120 }
  • 相关阅读:
    手工卸载.Net写的win服务
    程序员素质面试题
    GridView数据导出功能
    使用EventLog类写系统日志
    HTML Response ContentType 大全
    用C#做短信CMPP2.0/3.0协议 支持扩展号支持物理网卡
    CYQ.Data 轻量数据层之路 使用篇MAction 数据查询 视频 E (二十二)
    CYQ.Data 轻量数据层之路 V2.0 震撼惊世 支持多数据库/内置Aop(二十五)
    MapXtreme 2005 GIS开发入门系列 索引
    CYQ.Data 轻量数据层之路 框架如何应对数据库变化
  • 原文地址:https://www.cnblogs.com/wbxk/p/7116657.html
Copyright © 2020-2023  润新知