`

Java Zip解压缩

    博客分类:
  • J2SE
阅读更多
public class ZipUtil {
	Logger logger = Logger.getLogger(ZipUtil.class);

	/** 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;

	private String unzipFileTargetLocation;

	public ZipUtil() {
		b = new byte[8092];
	}

	/** Set the Mode (list, extract). */
	public 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.
	 * 
	 * @param fileName
	 *            unzip file name
	 * @param unZipTarget
	 *            location for unzipped file
	 */
	public void unZip(String fileName, String unZipTarget) {
		this.unzipFileTargetLocation = unZipTarget;
		dirsMade = new TreeSet();
		try {
			zippy = new ZipFile(fileName);
			Enumeration all = zippy.entries();
			while (all.hasMoreElements()) {
				getFile((ZipEntry) all.nextElement());
			}
		} catch (IOException err) {
			logger.error("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 e) throws 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);
				String fileName=zipName.substring(ix+1,zipName.length());
				zipName=fileName;
				
			}
			logger.debug("Creating " + zipName);
			String targetFile = this.unzipFileTargetLocation;
			File file=new File(targetFile);
			if(!file.exists())
				file.createNewFile();
			FileOutputStream os = new FileOutputStream(targetFile);
			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()) {
				logger.info("Directory " + zipName);
			} else {
				logger.info("File " + zipName);
			}
			break;
		default:
			throw new IllegalStateException("mode value (" + mode + ") bad");
		}
	}

	/**
	 * unzip zip file with
	 * 
	 * @param unZipFile,and
	 *            save unzipped file to
	 * @param saveFilePath
	 * @param unZipFile
	 *            full file path,like 'd:\temp\test.zip'
	 * @param saveFilePath
	 *            full file path,like 'd:\temp\test.kml'
	 * @return
	 */
	public static boolean unzip(String unZipFile, String saveFilePath) {
		boolean succeed = true;
		ZipInputStream zin = null;
		ZipEntry entry;
		try {
			// zip file path
			File olddirec = new File(unZipFile);
			zin = new ZipInputStream(new FileInputStream(unZipFile));
			// iterate ZipEntry in zip
			while ((entry = zin.getNextEntry()) != null) {
				// if folder,create it
				if (entry.isDirectory()) {
					File directory = new File(olddirec.getParent(), entry
							.getName());
					if (!directory.exists()) {
						if (!directory.mkdirs()) {
							System.out.println("Create foler in "
									+ directory.getAbsoluteFile() + " failed");
						}
					}
					zin.closeEntry();
				}
				// if file,unzip it
				if (!entry.isDirectory()) {
					File myFile = new File(saveFilePath);
					FileOutputStream fout = new FileOutputStream(myFile);
					DataOutputStream dout = new DataOutputStream(fout);
					byte[] b = new byte[1024];
					int len = 0;
					while ((len = zin.read(b)) != -1) {
						dout.write(b, 0, len);
					}
					dout.close();
					fout.close();
					zin.closeEntry();
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
			succeed = false;
			System.out.println(e);
		} finally {
			if (null != zin) {
				try {
					zin.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		if (succeed)
			System.out.println("File unzipped successfully!");
		else
			System.out.println("File unzipped with failure!");
		return succeed;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String unzipfile = "c:\\data\\kml\\aa.zip"; // 解压缩的文件名
		String saveTo = "d:\\temp\\xxx.xml";
		boolean success = ZipUtil.unzip(unzipfile, saveTo);
		if (success)
			System.out.println("File ");
	}
 
分享到:
评论

相关推荐

    java zip解压缩

    二、Java Zip解压缩 2. 使用`ZipInputStream`类进行解压缩: `ZipInputStream`类可以从输入流中读取Zip文件内容。以下是一个解压缩Zip文件到指定目录的示例: ```java import java.io.*; import java.util.zip.*; ...

    java ZIP 解压缩

    java语言操作解压缩文件。 /** * 数据压缩 * * @param data * @return * @throws Exception */ public static byte[] compress(byte[] data) throws Exception { ByteArrayInputStream bais = new ...

    Java工具类ZIP解压缩

    Java工具类ZIP解压缩Java工具类ZIP解压缩Java工具类ZIP解压缩

    java zip解压缩助手

    这是使用java 编写的一个zip解压缩工具,既可以解压缩zip包,也可以把目录打包成为zip压缩包. 源代码下载地址: http://pan.baidu.com/s/1c0EJrlm

    java android zip解压缩(解决压缩中文乱码问题)

    本篇文章将深入探讨如何在Android平台上解决Java ZIP库在解压缩中文文件时出现的乱码问题。 首先,我们要明白乱码问题的根源。在文件的压缩和解压缩过程中,文件名通常被编码为字节序列,这个序列取决于原始文件名...

    java zip文件压缩与解压缩

    解压缩ZIP文件则可以使用`org.apache.commons.compress.archivers.zip.ZipArchiveInputStream`类。同样,我们需要设置正确的编码来正确读取中文文件名: ```java import org.apache.commons.compress.archivers.zip...

    JAVA文件压缩与解压缩实践,java解压缩zip文件,Java源码.zip

    在Java编程语言中,文件的压缩与解压缩是常见的操作,尤其在数据传输、存储优化以及备份场景下显得尤为重要。...通过上述知识点,开发者能够有效地在Java环境中进行ZIP文件的压缩与解压缩操作,满足实际项目需求。

    java zip 压缩 解压缩 附带ant.jar

    首先,让我们来看一下`JavaZip.java`这个文件。它很可能包含了一个示例程序,演示了如何使用Java API来压缩和解压缩文件。在Java中,我们通常使用`ZipOutputStream`来创建ZIP文件,`ZipInputStream`来读取和解压缩...

    JAVA文件压缩与解压缩实践(源代码).zip

    JAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩实践(源代码).zipJAVA文件压缩与解压缩...

    java 解压缩zip文件

    在Java编程语言中,解压缩ZIP文件是一项常见的任务,特别是在处理数据传输、文件打包和部署等场景下。本文将深入探讨如何使用Java API来解压缩ZIP文件,包括基本概念、核心类库以及具体实现步骤。 ZIP文件是一种...

    (JAVA)利用Java实现zip压缩.解压缩.rar_decompress rar java_zip 压缩

    接下来,我们讨论如何解压缩ZIP文件。解压缩通常包括以下步骤: 1. **创建`ZipInputStream`**:同样,你需要创建一个`ZipInputStream`,它从ZIP文件的输入流读取。 ```java FileInputStream fis = new ...

    java解压缩zip代码与用到的jar包

    在本篇中,我们将深入探讨如何使用Java API来实现ZIP文件的解压缩,以及可能需要用到的第三方库。 首先,Java标准库(Java Standard Library)自身提供了对ZIP文件的支持。在`java.util.zip`包中,有两个关键类用于...

    JAVA解压ZIP格式的压缩包_java解压缩_zip_

    首先,我们需要了解Java中的`java.util.zip`包,这个包提供了处理压缩文件的基本工具。在ZIP格式的压缩包处理中,我们主要会用到`ZipInputStream`和`ZipEntry`这两个类。`ZipInputStream`是用于读取ZIP文件的输入流...

    利用Java实现zip压缩解压缩

    ### Java 实现 ZIP 文件压缩与解压缩 #### 知识点概述 在现代软件开发过程中,数据压缩是一项非常重要的技术,特别是在处理大量数据时。Java 作为一种广泛应用的编程语言,提供了丰富的 API 来支持文件的压缩与解...

    zip带密码压缩解压缩工具类(java)

    本文将深入探讨如何使用`zip4j`库来实现带密码的ZIP文件压缩与解压缩,该库支持中文文件名,并且具有良好的密码保护功能。 `zip4j`是一个强大的Java库,它提供了丰富的API来处理ZIP文件,包括添加、删除、提取文件...

    JAVA文件压缩与解压缩实践(源代码+论文)

    在Java编程语言中,文件的压缩与解压缩是常见的数据处理操作,特别是在数据传输、存储优化和备份场景中。本实践项目围绕这个主题展开,包括源代码和相关的论文,为学习者提供了深入理解和应用Java压缩库的机会。以下...

    java zip压缩解压工具解决中文乱码问题

    对于解压缩,同样需要处理编码问题。可以使用`ZipEntry`的`setName()`方法来设定文件名的编码: ```java ZipInputStream zis = new ZipInputStream(new FileInputStream("input.zip")); ZipEntry entry; while (...

    zip解压缩文件文件夹都可以(java)

    zip解压缩文件文件夹都可以,代码清晰,注释多。非常容易看懂

    JDK11 windows zip 解压缩版

    JDK11 Windows Zip解压缩版是开发者在Windows环境下快速启动Java开发的便捷方式。其带来的新特性和改进对于提升开发效率和代码质量都有显著帮助。通过简单的解压和环境变量配置,开发者就能轻松地在Windows系统上...

Global site tag (gtag.js) - Google Analytics