注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

love3400wind的blog

like

 
 
 

日志

 
 
 
 

java 实现压缩文件与目录  

2011-04-20 16:13:53|  分类: IT |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipCompressor {

 static final int BUFFER = 8192;

 private File zipFile;
 private FileOutputStream fileOutputStream;
 private CheckedOutputStream cos;
 private ZipOutputStream out;
 
 /**
  * 构造函数
  * @param pathName
  */
 public ZipCompressor(String pathName) {
  zipFile = new File(pathName);
  try {
   fileOutputStream = new FileOutputStream(zipFile);
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  }
  cos = new CheckedOutputStream(fileOutputStream, new CRC32());
  out = new ZipOutputStream(cos);
 }
 private void destroy (){
  
  try {
   out.close();
   cos.close();
   fileOutputStream.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
  
 }
 
 /**
  * 向压缩包中添加一个文件或目录
  * @param srcPathName
  */
 public void compress(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 = "";
   compress(file, this.out, basedir);
   
   
   
   //out.close();
   //cos.close();
   //fileOutputStream.close();
  } catch (Exception e) {
   e.printStackTrace();
   //throw new RuntimeException(e);
  }
 }
 

 private void compress(File file, ZipOutputStream out, String basedir) {
  /* 判断是目录还是文件 */
  if (file.isDirectory()) {
   System.out.println("压缩:" + basedir + file.getName());
   this.compressDirectory(file, out, basedir);
  } else {
   System.out.println("压缩:" + basedir + file.getName());
   this.compressFile(file, out, 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++) {
   // 递归
   compress(files[i], out, basedir + dir.getName() + "/");
  }
  /*
   * File[] files = dir.listFiles(); for (int i = 0; i < files.length;
   * i++) { // 递归 compress(files[i], out, basedir + dir.getName() + "/");
   * }
   */
 }

 /** 压缩一个文件 */
 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) {
    this.out.write(data, 0, count);
   }
   bis.close();
   out.closeEntry();
   //out.flush();
  } catch (Exception e) {
   throw new RuntimeException(e);
  }
 }

 /** 測試是否可以壓縮 */
 public static void main(String[] args) {
  ZipCompressor zc = new ZipCompressor("E:/test/szhzip.zip");
  String[] aa = { "E:/test/cs", "E:/test/a.cs", "E:/test/b.cs", "E:/test/c.cs" };
  for (int i = 0; i < aa.length; i++) {
   zc.compress(aa[i]);
  }
  zc.destroy();
  System.out.println("OK....");
  
 }

}

  评论这张
 
阅读(498)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017