对目录进行压缩.

/*
 * SimpleJavaZip.java 只能对文件进行压缩,但是我们在实际应用中, 更加需要的是对目录进行压缩.
 * 因此,需要对上面的 程序进行修改, 让它可以处理目录. 我们的基本思路是, 定义一个方法用于压缩文件,
 * 接收一个参数, 表示需要压缩的文件列表. 根据这个参数, 首先判断指定的 File 对象是文件还是目录,
 * 然后对这些文件对象递归调用本方法; 如果是文件, 则直接进行压缩操作.
 */

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipDir {
 public void zip(String zipFileName, String[] inputFiles) throws Exception {
  File temp = null;
  for (int i = 0; i < inputFiles.length; ++i) {
   temp = new File(inputFiles[i]);
   zip(zipFileName, temp);
  }

 }

 public void zip(String zipFileName, File inputFile) throws Exception {
  ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
    zipFileName));
  if (inputFile.isDirectory()) {
   zip(out, inputFile, "");
  } else {
   zip(out, inputFile, inputFile.getName());
  }
  System.out.println("压缩完成!");
  out.close();
 }

 public void zip(ZipOutputStream out, File f, String base) throws Exception {
  System.out.println("正在压缩: " + f.getName() + "... ...");
  if (f.isDirectory()) {
   System.out.println("新建目录: " + f.getName());
   File[] files = f.listFiles();
   out.putNextEntry(new ZipEntry(base + "/"));
   System.out.println(base);
   base = base.length() == 0 ? "" : base + "/";
   for (int i = 0; i < files.length; ++i) {
    // 对本目录下的所有文件对象递归调用本方法
    zip(out, files[i], base + files[i].getName());

   }

  } else {
   System.out.println("新增文件: " + f.getName());
   out.putNextEntry(new ZipEntry(base));
   FileInputStream in = new FileInputStream(f);
   int b;
   while ((b = in.read()) != -1) {
    out.write(b);
   }
   in.close();
  }
 }

 public static void main(String[] args) {
  try {
   ZipDir t = new ZipDir();
   t.zip("c://test.zip", args);
  } catch (Exception e) {
   e.printStackTrace();
  }

 }
 /*
  * 这个程序的关键步骤都写出了注释. 通过这个程序可以实现目录的压缩
  */
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值