java 解压zip 文件

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
public class ZipTool {
 
 public static void main(String[] args) {
  //F:/test1  为需要解压文件的根目录
  traversDir("F:/test1");
 }

 /**
  * 递归解压根目录下zip文件,解压后删除zip文件。
  * @param filename
  */
 public static void traversDir(String filename) {
  File file = new File(filename);
  if (file != null) {
   if (file.isDirectory() && file.list().length != 0) {
    for (int i = 0; i < file.list().length; i++) {
     File f = file.listFiles()[i];
     if (!f.isDirectory() && f.getName().endsWith(".zip")) {
      System.out.println(f.getPath());
      System.out.println(f.getParent());
      try {
       //解压文件 方法
       unZip(f.getPath());

       //解压后删除文件 begin
       File deFile = new File(f.getPath());
       if (f.exists()) {
        boolean flag = f.delete();
        if (flag) {
         System.out.println(f.getPath()
           + " file delete sucess!");
        } else {
         System.out.println(f.getPath()
           + " file delete fail!");
        }
       }
       //解压后删除文件 end
      } catch (Exception e) {

      }
     } else {
      traversDir(f.toString());
     }
    }
   }

  }
 }

 /**
  * 解压文件的方法
  * @param path
  * @throws IOException
  */
 public static void unZip(String path) throws IOException {
  File file = new File(path);//压缩文件 
  String savePath = file.getParent();

  ZipFile zipFile = new ZipFile(file);//实例化ZipFile,每一个zip压缩文件都可以表示为一个ZipFile 

  //实例化一个Zip压缩文件的ZipInputStream对象,可以利用该类的getNextEntry()方法依次拿到每一个ZipEntry对象 
  FileInputStream fileInputStream = new FileInputStream(file);
  ZipInputStream zipInputStream = new ZipInputStream(fileInputStream);

  ZipEntry zipEntry = null;

  while ((zipEntry = zipInputStream.getNextEntry()) != null) {

   String fileName = zipEntry.getName();

   File temp = new File(savePath + "\\" + fileName);

   if (!temp.getParentFile().exists())

    temp.getParentFile().mkdirs();

   OutputStream os = new FileOutputStream(temp);

   //通过ZipFile的getInputStream方法拿到具体的ZipEntry的输入流 

   InputStream is = zipFile.getInputStream(zipEntry);

   int len = 0;

   while ((len = is.read()) != -1) {
    os.write(len);
   }
   os.close();

   is.close();

  }
  // 关闭文件流
  zipInputStream.close();
  fileInputStream.close();
  zipFile.close(); //zipFile 文件流关闭, 如果缺少这语句, 在后续的删除文件 会失败,无法删除文件

 }
}

posted @ 2012-12-20 15:52  Chendisheng  阅读(2117)  评论(0编辑  收藏  举报