`
zhougm1030
  • 浏览: 20093 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

解压 中文压缩包 和压缩包内有中文文件的代码

    博客分类:
  • java
阅读更多

最近在搞解压缩的问题,发现了用java.util.zip  是可以解压压缩包,但是解压含有中文的压缩包就会报错。所以改用ant.jar来解决这个问题,代码如下:

 

 

 

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 org.apache.tools.zip.ZipFile;

public class ZipFileList
{
	public static final int DEFAULT_BUFFER = 1024 * 4;
	public static long copy(InputStream aIn, OutputStream aOut, int aBufferSize)
			throws IOException
	{
		byte[] buffer = new byte[aBufferSize];
		int read = 0;
		long totalBytes = 0;
		while (-1 != (read = aIn.read(buffer)))
		{
			aOut.write(buffer, 0, read);
			totalBytes += read;
		}
		return totalBytes;
	}

	public static long copy(InputStream aIn, OutputStream aOut)
			throws IOException
	{
		return copy(aIn, aOut, DEFAULT_BUFFER);
	}

	public static void unzip1(File zipFileName, File outputDirectory)
			throws Exception
	{
		ZipFile zf = null;
		try
		{
			zf = new ZipFile(zipFileName,"GBK");
			Enumeration en = zf.getEntries();
			while (en.hasMoreElements())
			{
				org.apache.tools.zip.ZipEntry entry = (org.apache.tools.zip.ZipEntry) en
						.nextElement();
				System.out.println(entry.getName());

				FileOutputStream out = null;
				try
				{
					System.out.println(entry.isDirectory());

					if (!entry.isDirectory())
					{
						File newFile = new File(outputDirectory,
								entry.getName());
						newFile.getParentFile().mkdirs();
						out = new FileOutputStream(newFile);
						copy(zf.getInputStream(entry), out);
					}

				}
				catch (Exception io)
				{
					io.printStackTrace();
					throw io;
				}
				finally
				{
					if (out != null) out.close();
				}

			}
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				if (zf != null) zf.close();
			}
			catch (IOException e)
			{
				e.printStackTrace();
			}
		}
	}

	public static void main(String[] args)
	{

		try
		{
			ZipFileList.unzip1(new File("F:/中文.zip"), new File("f:/a"));
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		System.out.println("OK");
	}

}
 

 

上面的代码已经经过测试没有问题。如有问题请留言。望多交流。

 

 

分享到:
评论

相关推荐

    回调有进度条的解压Zip压缩包,解决压缩包内路径中文乱码问题

    只支持zip压缩包的解压,支持压缩包内中文路径、回调有进度条和正在解压的名字 ******************************** 重要说明:该压缩包内的是两个工具类,不是完整的demo。 实现方法:实现回调接口,调用解压方法即可

    易语言模块文件压缩解压.rar

    在“易语言模块文件压缩解压.rar”这个压缩包中,包含的资源很可能是用于处理易语言程序中文件压缩和解压功能的模块。下面将详细介绍这个主题中的相关知识点。 一、易语言模块 易语言模块是易语言编程中的一个重要...

    易语言取压缩包中的文件列表源码

    在处理压缩包文件时,易语言提供了丰富的内置函数和模块,使得开发者可以方便地操作压缩文件,例如获取压缩包内的文件列表。这个源码教程将帮助初学者理解如何使用易语言来实现这一功能。 在易语言中,我们通常会...

    jdk 9的完整压缩包,不是exe执行文件,解压完配置环境直接可以跑java代码,内置简易教程,保证没有问题

    自己提取的压缩包 jdk 内有配置文档及图片照着文档配置即可成功。 将下载好的jdk解压,然后通过配置系统环境变量指向该文件即可。 右击我的电脑(计算机)——属性——高级系统设置 第一步:新建JAVA_HOME变量。点击...

    一个压缩包文件

    压缩包内的文件“msvcp100d.dll”正是用户需要的缺失文件,将它放到系统目录(如C:\Windows\System32)或程序的安装目录下,可以解决由于缺失此DLL导致的程序运行问题。 “PCHome_download.html”可能是太平洋电脑...

    jy.zip_jy php_jy.p_jy.php_jy文件解压_压缩包jy

    标题中的"jy.zip_jy php_jy.p_jy.php_jy文件解压_压缩包jy"提及的是一个名为"jy.zip"的压缩包文件,其中包含了多个与"jy"相关的PHP文件,如"jy.php"和可能的加密文件"jy.p"。"jy.php"很可能是一个PHP脚本,而"jy.p...

    GIT 压缩包 适用于压缩包式安装git

    2. 解压文件:将下载的压缩包解压到你选择的目录。 3. 配置环境变量:将Git的可执行文件路径添加到系统的PATH环境变量中,以便在任何目录下都能使用Git命令。 4. 初始化Git:打开终端或命令提示符,运行`git ...

    压缩包一机一码授权解压工具

    解压程序调用了winrar的外部命令,因此需要电脑安装有winrar才行,解压程序已经内置了64位和32位的winrar安装程序(安装程序来源来自网络),没有安装的电脑可以直接安装使用 支持格式:理论上winrar支持的格式都是...

    JDK 8 压缩包文件 免费分享

    在这个免费分享的JDK 8压缩包文件中,你可以找到所有必要的组件来搭建和运行Java应用程序。 首先,JDK 8的核心特性之一是Lambda表达式。这是一种函数式编程的概念,允许将函数作为一个对象进行传递,简化了多线程...

    Linux下rar及zip压缩包中批量替换某文件脚本

    `rar`则是由WinRAR公司开发的专有压缩格式,尽管不是开源的,但在Linux上也有相应的工具如`unrar`用于解压和操作rar文件。 `zip_replace.sh`脚本是针对zip文件批量替换文件的工具。在脚本中,通常会包含以下步骤: ...

    批量解压并对文件重命名 C#

    对于每个ZIP文件,它会创建一个以压缩包名称为名的新目录,解压文件到这个目录,然后将所有解压的文件重命名为压缩包的名称。 注意,这个示例假设ZIP文件中只有一个文件。如果有多个文件,你可能需要根据需求调整...

    [绿色阅览工具]-Manga_Meeya-[直读压缩包,无需先解压]

    传统上,用户如果想要阅读压缩包内的漫画,往往需要先下载压缩文件到本地,然后再使用解压缩软件进行解压,最后才能通过阅读器进行观看。这一流程不仅繁琐,而且在处理大量或者大容量压缩包时,会消耗相当多的时间和...

    Redis Desktop Manager redis的可视化工具压缩包,解压即用

    这个压缩包包含的就是这款工具的安装文件,解压后可以直接运行,无需额外安装步骤。 Redis是一种高性能的键值数据存储系统,常被用作数据库、缓存和消息代理。它的核心特性包括支持多种数据结构(如字符串、哈希、...

    java10的完整压缩包,不是exe执行文件,解压完配置环境直接可以跑java代码,内置简易教程,保证没有问题

    自己提取的压缩包 jdk 内有配置文档及图片照着文档配置即可成功。 将下载好的jdk解压,然后通过配置系统环境变量指向该文件即可。 右击我的电脑(计算机)——属性——高级系统设置 第一步:新建JAVA_HOME变量。点击...

    linux、window通用文件解压

    本篇文章将详细介绍如何在Linux和Windows上解压兼容的压缩文件,特别是处理包含中文的压缩包。 首先,让我们关注“通用”这个词。在Linux和Windows之间实现通用解压,通常意味着我们需要使用一种在两个平台上都广泛...

    C#编写RAR压缩包文件搜索器

    本项目“C#编写RAR压缩包文件搜索器”旨在教你如何利用C#实现一个功能强大的工具,它能帮助用户在多个RAR压缩包内快速找到特定的文件,并将其解压出来。这对于处理大量压缩文件,尤其是需要频繁查找特定文件的情况,...

    使用java代码替换zip内的文件.docx

    总结来说,这段Java代码展示了如何使用`ZipInputStream`和`ZipOutputStream`来替换ZIP文件中的文件,而无需先解压再重新压缩。这种方法减少了磁盘空间的占用,提高了处理效率,特别适用于处理大文件或需要高效操作...

    如何分割压缩包 压缩包分割器 压缩包分割软件下载

    4. **安全问题**:在接收来自他人的分割压缩包时,要注意病毒和恶意软件的风险,先进行安全检查再进行合并和解压。 总之,压缩包分割器是处理大型压缩文件的有效工具,通过合理使用,可以解决传输和存储中的诸多...

    论坛压缩包注释通用文件

    在注释中,明确指出了压缩包内的文件仅供个人学习和研究使用,禁止用于商业目的。此外,还强调了如果要转载或分享该资源,必须保留原压缩包中的所有文件,包括但不限于作者声明、版权声明等。这表明了分享者对于资源...

    易语言取压缩包中的文件列表源码.zip

    在易语言中,文件操作涉及到的基本概念有文件路径、文件句柄和文件属性。文件路径指定了文件在计算机中的位置,文件句柄是在程序中代表文件的一个标识符,而文件属性包括文件大小、创建时间、修改时间等。 3. **...

Global site tag (gtag.js) - Google Analytics