`
junlong750
  • 浏览: 22483 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

文件解压缩工具类ZipUtil

阅读更多
package com.imooc.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;


/**
 * 
 * @version 1.0
 * @since 2015-9-14
 * 文件解压缩工具类
 *
 */
public final class ZipUtil
{

	/**
	 * 缓冲大小
	 */
	private static int BUFFERSIZE = 2 << 10;
	
	/**
	 * 压缩
	 * @param paths
	 * @param fileName
	 */
	public static void zip(String[] paths, String fileName)
	{
		
		ZipOutputStream zos = null;
		try
		{
			zos = new ZipOutputStream(new FileOutputStream(fileName));
			for(String filePath : paths)
			{
				//递归压缩文件
				File file = new File(filePath);
				String relativePath = file.getName();
				if(file.isDirectory())
				{
					relativePath += File.separator;
				}
				zipFile(file, relativePath, zos);
			}
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				if(zos != null)
				{
					zos.close();
				}
			}
			catch (IOException e)
			{
				e.printStackTrace();
			}
		}
	}
	
	public static void zipFile(File file, String relativePath, ZipOutputStream zos)
	{
		InputStream is = null;
		try
		{
			if(!file.isDirectory())
			{
				ZipEntry zp = new ZipEntry(relativePath);
				zos.putNextEntry(zp);
				is = new FileInputStream(file);
				byte[] buffer = new byte[BUFFERSIZE];
				int length = 0;
				while ((length = is.read(buffer)) >= 0)
				{
					zos.write(buffer, 0, length);
				}
				zos.flush();
				zos.closeEntry();
			}
			else
			{
		        for(File f: file.listFiles())
				{
	        		zipFile(f, relativePath + f.getName() + File.separator, zos);
				}
			}
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				if(is != null)
				{
					is.close();
				}
			}
			catch (IOException e)
			{
				e.printStackTrace();
			}
		}
	}
	
	/**
	 * 解压缩
	 * @param fileName
	 * @param path
	 */
	public static void unzip(String fileName, String path)
	{
		FileOutputStream fos = null;
		InputStream is = null;
		try
		{
			ZipFile zf = new ZipFile(new File(fileName));
			Enumeration en = zf.entries();
			while (en.hasMoreElements())
			{
				ZipEntry zn = (ZipEntry) en.nextElement();
				if (!zn.isDirectory())
				{
					is = zf.getInputStream(zn);
					File f = new File(path + zn.getName());
					File file = f.getParentFile();
					file.mkdirs();
					fos = new FileOutputStream(path + zn.getName());
					int len = 0;
					byte bufer[] = new byte[BUFFERSIZE];
					while (-1 != (len = is.read(bufer)))
					{
						fos.write(bufer, 0, len);
					}
					fos.close();
				}
			}
		}
		catch (ZipException e)
		{
			e.printStackTrace();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				if(null != is)
				{
					is.close();
				}
				if(null != fos)
				{
					fos.close();
				}
			}
			catch (IOException e)
			{
				e.printStackTrace();
			}
		}
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		zip(new String[] {"D:/tmp/20150418/logs/file/2015-08-28/debug-log.log","D:/tmp/20150418/logs/file/2015-08-28/error-log.log"}, "D:/tmp/20150418/logs/file/2015-08-28/test.zip");
		unzip("D:/tmp/20150418/logs/file/2015-08-28/test.zip", "D:/test/");
	}
}

 

 

 

分享到:
评论

相关推荐

    ZipUtil文件压缩工具类(解决中文乱码)

    总之,`ZipUtil`文件压缩工具类通过结合`ZipEntry`和`ZipOutputStream`,提供了一种高效且健壮的解决方案,尤其适合处理包含中文字符的文件和目录,确保在压缩和解压过程中不会出现乱码问题。这对于需要在Java应用...

    Java实现的zip压缩及解压缩工具类示例

    "Java实现的zip压缩及解压缩工具类示例" Java实现的zip压缩及解压缩工具类示例主要介绍了Java实现的zip压缩及解压缩工具类,结合实例形式分析了java对文件的进行zip压缩及解压缩的具体操作技巧。下面将对该工具类的...

    java 打包文件(文件夹)为 zip压缩包 java 压缩文件

    10. **标签“工具”**: 可能意味着`ZIPUtil`不仅仅是一个简单的功能,它可能是一个更复杂的工具,具有更多的功能,比如解压缩,支持多种压缩格式等。 11. **文件“ant.jar”**: 这是一个可能的依赖库,可能包含了...

    基于ant.jar的文件压缩工具类

    本文将深入探讨如何利用ant.jar中的API创建一个自定义的文件压缩工具类,实现对文件和目录的zip与unzip操作,并关注编码设置的重要性。 首先,我们需要导入ant.jar库到项目中。在Java中,我们可以通过Maven或Gradle...

    基于Java向zip压缩包追加文件

    当需要向已存在的ZIP文件追加文件时,首先使用`ZipUtil`解压缩ZIP文件到一个临时目录,然后在该目录中添加新的文件,最后重新压缩整个目录并覆盖原有的ZIP文件。以下是大致的步骤: - 使用`ZipUtil`的`unzip`方法...

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

    Java提供了强大的压缩工具类,如`java.util.zip`包下的`ZipFile`、`ZipInputStream`、`ZipOutputStream`等类,可以方便地进行ZIP格式的压缩和解压缩操作。 - **ZipOutputStream**:用于创建ZIP格式的压缩文件。 - *...

    c++ zip 压缩 解压缩

    在C++编程中,处理文件压缩和解压缩是一项...`ZipUtil`这个类很可能包含了上述提到的所有功能,实现了从文件和目录的压缩到解压缩的完整流程。在实际应用中,你可以根据需求调整和扩展这个工具,以满足特定项目的需求。

    ZipUtil.rar

    5. **解压缩ZIP**:解压ZIP文件涉及以下操作: - 创建`ZipInputStream`,读取ZIP文件。 - 使用`getNextEntry()`遍历ZIP文件中的每个条目。 - 对于每个条目,创建一个`File`对象,表示解压后的文件或目录。 - ...

    将文件进行zip压缩并base64加密和解密

    解密时,先使用`Base64Util.decodeBase64StringToFile()`将BASE64字符串解码回ZIP文件,再使用相应的工具解压缩。 在实际开发中,这些工具类可以封装成一个完整的库,提供给其他部分代码使用。例如,你可以创建一个...

    仿zip压缩软件的java代码|zip.rar

    本项目是作者使用Eclipse开发的一个简单但功能齐全的ZIP压缩与解压缩工具,它包含了文件分割、进度条显示以及图形用户界面(GUI)。 【描述】:该项目的核心在于理解ZIP文件格式规范和Java的I/O流以及压缩算法。...

    使用java基础类实现zip压缩和zip解压工具类分享

    首先,`ZipUtil`类包含两个主要方法:`zip`用于压缩文件或目录,`unzip`用于解压缩ZIP文件。这两个方法都是静态的,可以直接通过类名调用,无需创建对象实例。 `zip`方法接收两个参数:`sourceFilePath`表示需要...

    C# 压缩源码

    2. **ZipUtil.cs**:这个文件名暗示可能是一个自定义的压缩工具类,包含了一系列用于压缩和解压缩的方法。在C#中,通常会创建这样的辅助类,封装压缩操作,以提高代码复用性。 3. **FileUtil.cs**:同样,FileUtil...

    Java带密码压缩zip与解压文件源码

    接下来,我们编写一个名为`ZipUtil`的工具类,它包含了压缩和解压缩的功能: ```java import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.util.io.TeeOutputStream; import ...

    java实用工具(zip)

    标签中的"源码"和"工具"可能指的是通过阅读和分析Java标准库中的`java.util.zip`源代码,以及利用这些API创建自己的工具类或实用程序,以适应特定的项目需求。 通过以上知识点,开发者可以有效地在Java环境中处理....

    Java解压zip文件完整代码分享

    如果你的项目不使用任何构建工具,你可以手动下载jar文件并将其添加到项目的类路径中。 ```xml &lt;!-- Maven --&gt; &lt;groupId&gt;org.apache.commons &lt;artifactId&gt;commons-compress &lt;version&gt;1.21 ``` 或 ```groovy ...

    java多重打包解压ZIP文件

    解压缩ZIP文件则涉及`ZipInputStream`的使用。以下是一个基本的解压示例: ```java import java.io.*; import java.util.zip.*; public class UnzipUtil { public static void unzipFile(String zipFileName, ...

Global site tag (gtag.js) - Google Analytics