使用java.util.zip解压缩-打印或解压缩Jar或PKZIP文件 : Zip文件Tar文件 « 文件输入输出 « Java

En
Java
1. 图形用户界面
2. 三维图形动画
3. 高级图形
4. 蚂蚁编译
5. Apache类库
6. 统计图
7. 
8. 集合数据结构
9. 数据类型
10. 数据库JDBC
11. 设计模式
12. 开发相关类
13. EJB3
14. 电子邮件
15. 事件
16. 文件输入输出
17. 游戏
18. 泛型
19. GWT
20. Hibernate
21. 本地化
22. J2EE平台
23. 基于J2ME
24. JDK-6
25. JNDI的LDAP
26. JPA
27. JSP技术
28. JSTL
29. 语言基础知识
30. 网络协议
31. PDF格式RTF格式
32. 映射
33. 常规表达式
34. 脚本
35. 安全
36. Servlets
37. Spring
38. Swing组件
39. 图形用户界面
40. SWT-JFace-Eclipse
41. 线程
42. 应用程序
43. Velocity
44. Web服务SOA
45. 可扩展标记语言
Java 教程
Java » 文件输入输出 » Zip文件Tar文件屏幕截图 
使用java.util.zip解压缩-打印或解压缩Jar或PKZIP文件
 

/*
 * Copyright (c) Ian F. Darwin, http://www.darwinsys.com/, 1996-2002.
 * All rights reserved. Software written by Ian F. Darwin and others.
 * $Id: LICENSE,v 1.8 2004/02/09 03:33:38 ian Exp $
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 
 * Java, the Duke mascot, and all variants of Sun's Java "steaming coffee
 * cup" logo are trademarks of Sun Microsystems. Sun's, and James Gosling's,
 * pioneering role in inventing and promulgating (and standardizing) the Java 
 * language and environment is gratefully acknowledged.
 
 * The pioneering role of Dennis Ritchie and Bjarne Stroustrup, of AT&T, for
 * inventing predecessor languages C and C++ is also gratefully acknowledged.
 */

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

/**
 * UnZip -- print or unzip a JAR or PKZIP file using java.util.zip. Command-line
 * version: extracts files.
 
 @author Ian Darwin, Ian@DarwinSys.com $Id: UnZip.java,v 1.7 2004/03/07
 *         17:40:35 ian Exp $
 */
public class UnZip {
  /** Constants for mode listing or mode extracting. */
  public static final int LIST = 0, EXTRACT = 1;

  /** Whether we are extracting or just printing TOC */
  protected int mode = LIST;

  /** The ZipFile that is used to read an archive */
  protected ZipFile zippy;

  /** The buffer for reading/writing the ZipFile data */
  protected byte[] b;

  /**
   * Simple main program, construct an UnZipper, process each .ZIP file from
   * argv[] through that object.
   */
  public static void main(String[] argv) {
    UnZip u = new UnZip();

    for (int i = 0; i < argv.length; i++) {
      if ("-x".equals(argv[i])) {
        u.setMode(EXTRACT);
        continue;
      }
      String candidate = argv[i];
      // System.err.println("Trying path " + candidate);
      if (candidate.endsWith(".zip"|| candidate.endsWith(".jar"))
        u.unZip(candidate);
      else
        System.err.println("Not a zip file? " + candidate);
    }
    System.err.println("All done!");
  }

  /** Construct an UnZip object. Just allocate the buffer */
  UnZip() {
    b = new byte[8092];
  }

  /** Set the Mode (list, extract). */
  protected void setMode(int m) {
    if (m == LIST || m == EXTRACT)
      mode = m;
  }

  /** Cache of paths we've mkdir()ed. */
  protected SortedSet dirsMade;

  /** For a given Zip file, process each entry. */
  public void unZip(String fileName) {
    dirsMade = new TreeSet();
    try {
      zippy = new ZipFile(fileName);
      Enumeration all = zippy.entries();
      while (all.hasMoreElements()) {
        getFile((ZipEntryall.nextElement());
      }
    catch (IOException err) {
      System.err.println("IO Error: " + err);
      return;
    }
  }

  protected boolean warnedMkDir = false;

  /**
   * Process one file from the zip, given its name. Either print the name, or
   * create the file on disk.
   */
  protected void getFile(ZipEntry ethrows IOException {
    String zipName = e.getName();
    switch (mode) {
    case EXTRACT:
      if (zipName.startsWith("/")) {
        if (!warnedMkDir)
          System.out.println("Ignoring absolute paths");
        warnedMkDir = true;
        zipName = zipName.substring(1);
      }
      // if a directory, just return. We mkdir for every file,
      // since some widely-used Zip creators don't put out
      // any directory entries, or put them in the wrong place.
      if (zipName.endsWith("/")) {
        return;
      }
      // Else must be a file; open the file for output
      // Get the directory part.
      int ix = zipName.lastIndexOf('/');
      if (ix > 0) {
        String dirName = zipName.substring(0, ix);
        if (!dirsMade.contains(dirName)) {
          File d = new File(dirName);
          // If it already exists as a dir, don't do anything
          if (!(d.exists() && d.isDirectory())) {
            // Try to create the directory, warn if it fails
            System.out.println("Creating Directory: " + dirName);
            if (!d.mkdirs()) {
              System.err.println("Warning: unable to mkdir "
                  + dirName);
            }
            dirsMade.add(dirName);
          }
        }
      }
      System.err.println("Creating " + zipName);
      FileOutputStream os = new FileOutputStream(zipName);
      InputStream is = zippy.getInputStream(e);
      int n = 0;
      while ((n = is.read(b)) 0)
        os.write(b, 0, n);
      is.close();
      os.close();
      break;
    case LIST:
      // Not extracting, just list
      if (e.isDirectory()) {
        System.out.println("Directory " + zipName);
      else {
        System.out.println("File " + zipName);
      }
      break;
    default:
      throw new IllegalStateException("mode value (" + mode + ") bad");
    }
  }
}

           
         
  
Related examples in the same category
1. 提取压缩文件内容
2. 一个压缩文件清单的内容
3. 阅读条目以zip /压缩文件
4. 使用ZipInputStream解压缩Zip文件
5. 使用ZipFile解压缩Zip文件
6. 创建校验的Zip文件
7. 读取Zip文件的校验值
8. 创建一个压缩文件,与java.util.zip包
9. 从一个压缩文件提取文件
10. 读取一个压缩文件
11. 从一个压缩文件检索压缩文件
12. 检索ZIP文件的内容
13. Making a zip file of directory including its subdirectories recursively
14. 显示压缩zip文件的内容
15. 字节数组
16. 解压缩字节数组
17. 读压缩文件
18. 写压缩文件
19. The java.util.zip package can be used to create a checksum.
20. 读一个压缩文件的内容使用ZipFile
21. 列出Zip文件的条目
22. 压缩流
23. 压缩流:奇偶校验
24. 压缩流:文件汇总
25. Create a simple ZIP File: not retain any directory path information about the files.
26. 解压缩文件
27. 解压的字节数组
28. 创建压缩文件
29. 内容压缩文件列表
30. 从一个压缩文件检索压缩文件
31. Calculating the Checksum of a Byte Array (Compute Adler-32 checksum)
32. 计算循环冗余校验32
33. 计算文件校验和
34. 压缩字符串(字节数组)的Deflater
35. 使用Java代码来压缩文件夹
36. Uses Zip compression to compress any number of files given on the command line
37. 负载zip文件和扫描zip文件
38. 读ZIP文件的内容
39. 磁带存档列表:tar文件
40. 压缩字节数组
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.