gzip unzip java 压缩 解压缩 bytes

简介:     import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.

 

 

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.zip.GZIPOutputStream;
import java.util.zip.ZipInputStream;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;

public class ZipUtil
{
	 
	static void createDir(String path)
	{
		File dir = new File(path);
		if (dir.exists() == false)
			dir.mkdir();
	}

	 
	static String getSuffixName(String name)
	{
		return name.substring(0, name.lastIndexOf("."));
	}
 
	public static void unzip(File src, File dstDir) throws IOException
	{
		ZipFile zipFile = null;
		try
		{
			// 创建zip文件对象
			//zipFile = new ZipFile(src);
			 if(System.getProperty("os.name").toLowerCase().indexOf("windows") >= 0){  
	             zipFile = new ZipFile(src,"GBK");  
	         }else if(System.getProperty("os.name").toLowerCase().indexOf("linux") >= 0){  
	             //zipFile = new ZipFile(src,"GB2312");
	        	 zipFile = new ZipFile(src,"GBK");
	         }  
			// 得到zip文件条目枚举对象
			Enumeration zipEnum = zipFile.getEntries();
			// 定义输入输出流对象
			// 定义对象
			ZipEntry entry = null;
			// 循环读取条目
			while (zipEnum.hasMoreElements())
			{
				// 得到当前条目
				entry = (ZipEntry) zipEnum.nextElement();
				String entryName = new String(entry.getName());			
				// 用/分隔条目名称
				String names[] = entryName.split("\\/");
				int length = names.length;
				String path = dstDir.getAbsolutePath();
				for (int v = 0; v < length; v++)
				{
					if (v < length - 1)
					{ // 最后一个目录之前的目录
						path += "/" + names[v] + "/";
						createDir(path);
					}
					else
					{ // 最后一个
						if (entryName.endsWith("/")) // 为目录,则创建文件夹
							createDir(dstDir.getAbsolutePath() + "/" + entryName);
						else
						{
							InputStream input = null;
							OutputStream output = null;
							try
							{// 为文件,则输出到文件
								input = zipFile.getInputStream(entry); 
								output = new FileOutputStream(new File(dstDir.getAbsolutePath() + "/" + entryName));
								byte[] buffer = new byte[1024 * 8];
								int readLen = 0;
								while ((readLen = input.read(buffer, 0, 1024 * 8)) != -1)
									output.write(buffer, 0, readLen);
								// 关闭流
								output.flush();
							}
							finally
							{
								if (input != null)
									input.close();
								if (output != null)
									output.close();
							}
						}
					}
				}
			}
		}
		finally
		{
			if (zipFile != null)
				zipFile.close();
		}
	}
 
	public static void unzip(String zipFilePath, String unzipDirectory) throws Exception
	{
		// 创建文件对象
		File file = new File(zipFilePath);
		// 创建本zip文件解压目录
		File unzipFile = new File(unzipDirectory);
		if (unzipFile.exists())
			unzipFile.delete();
		unzipFile.mkdir();
		unzip(file, unzipFile);
	}
 
	public static byte[] unZip(byte[] data)
	{
		byte[] b = null;
		try
		{
			ByteArrayInputStream bis = new ByteArrayInputStream(data);
			ZipInputStream zip = new ZipInputStream(bis);
			while (zip.getNextEntry() != null)
			{
				byte[] buf = new byte[1024];
				int num = -1;
				ByteArrayOutputStream baos = new ByteArrayOutputStream();
				while ((num = zip.read(buf, 0, buf.length)) != -1)
				{
					baos.write(buf, 0, num);
				}
				b = baos.toByteArray();
				baos.flush();
				baos.close();
			}
			zip.close();
			bis.close();
		}
		catch (Exception ex)
		{
			ex.printStackTrace();
		}
		return b;
	}

	public static byte[] gZip(byte[] data) {
		  byte[] b = null;
		  try {
		   ByteArrayOutputStream bos = new ByteArrayOutputStream();
		   GZIPOutputStream gzip = new GZIPOutputStream(bos);
		   gzip.write(data);
		   gzip.finish();
		   gzip.close();
		   b = bos.toByteArray();
		   bos.close();
		  } catch (Exception ex) {
		   ex.printStackTrace();
		  }
		  return b;
		 }
	
	
	public static void main(String[] args) throws Exception
	{
		// unzip("F:/aaaaaaaa.zip", "F:");
		// System.out.println("over....................");
		String a = "hellp aa bb cc";
		System.out.println(a.lastIndexOf("he"));

	}
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

捐助开发者

在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。



 
 
 谢谢您的赞助,我会做的更好!

 

 

目录
相关文章
|
4天前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
15 2
|
26天前
|
算法 Java
Java 压缩文件
在Java中压缩文件是一个常见的需求,通常可以通过使用Java自带的`java.util.zip`包来实现。这个包提供了`ZipOutputStream`类来创建ZIP格式的压缩文件。以下是一个简单的示例,展示了如何将多个文件压缩到一个ZIP文件中。 ### 示例:将多个文件压缩到一个ZIP文件中 ```java import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class ZipFilesExample { public static vo
|
2月前
|
Java
Java SpringBoot 7z 压缩、解压
Java SpringBoot 7z 压缩、解压
55 1
|
2月前
|
存储 安全 算法
Java中防止压缩炸弹的技术分享
【8月更文挑战第17天】在软件开发和数据处理的日常工作中,我们经常会遇到各种压缩文件。然而,一种被称为“压缩炸弹”的恶意文件却给开发者带来了不小的困扰。压缩炸弹通过特殊设计的压缩算法,使得极小的文件在解压后能膨胀到异常巨大的体积,从而消耗大量系统资源甚至导致系统崩溃。本文将围绕“如何在Java中防止压缩炸弹”这一主题,分享一些实用的技术干货。
58 0
|
3月前
|
Java 运维
开发与运维技术问题之ava对象头压缩技术支持所有的Java垃圾回收器如何解决
开发与运维技术问题之ava对象头压缩技术支持所有的Java垃圾回收器如何解决
28 1
|
2月前
|
Java 大数据 测试技术
Java对象头压缩---- 永久为Java应用“降本增效”
本文介绍了一下OpenJDK的最新技术,对象头压缩,来大幅优化Java对象的内存占用。
|
3月前
|
算法 Java
Java面试题:解释垃圾回收中的标记-清除、复制、标记-压缩算法的工作原理
Java面试题:解释垃圾回收中的标记-清除、复制、标记-压缩算法的工作原理
46 1
|
3月前
|
算法 Java 程序员
Java面试题:解释Java的垃圾回收机制,包括常见的垃圾回收算法。介绍一下Java的垃圾回收算法中的标记-压缩算法。
Java面试题:解释Java的垃圾回收机制,包括常见的垃圾回收算法。介绍一下Java的垃圾回收算法中的标记-压缩算法。
35 0
|
4月前
|
Java
赫夫曼压缩解压(java)
赫夫曼压缩解压(java)
|
4月前
|
Java
Java将指定文件/文件夹压缩成zip、rar压缩文件--解決中文乱码
Java将指定文件/文件夹压缩成zip、rar压缩文件--解決中文乱码
下一篇
无影云桌面