`
yang_min
  • 浏览: 342147 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java压缩 解压缩zip 并解决linux下中文乱码

 
阅读更多
1:再压缩前,要设置linux模式, 需要使用第三方ant-1.6.5.jar

  如果是文件目录,则

ZipEntry zipEntry=new ZipEntry(basePath + System.getProperties().getProperty("file.separator"));

zipEntry.setUnixMode(755);//解决linux乱码

 
如果是文件,则
ZipEntry zipEntry=new ZipEntry(base);
zipEntry.setUnixMode(644);//解决linux乱码



然后在输出时强制设置编码:

 ZipOutputStream out = new ZipOutputStream(new FileOutputStream(

             zipFileName));

     out.setEncoding("GBK");//解决linux乱码



全部代码如下:



import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import java.io.OutputStream;

import org.apache.tools.zip.ZipEntry;

import org.apache.tools.zip.ZipOutputStream;

import org.apache.tools.ant.Project;

import org.apache.tools.ant.taskdefs.Expand;

/**
 * 文件夹压缩,支持win和linux
 * 
 * */

public class ZipUtil

{

	/**
	 * @param inputFileName
	 *            输入一个文件夹
	 * @param zipFileName
	 *            输出一个压缩文件夹,打包后文件名字
	 * @throws Exception
	 */

	public static OutputStream zip(String inputFileName, String zipFileName)
			throws Exception

	{

		return zip(zipFileName, new File(inputFileName));

	}

	private static OutputStream zip(String zipFileName, File inputFile)
			throws Exception

	{

		ZipOutputStream out = new ZipOutputStream(new FileOutputStream(

		zipFileName));

		out.setEncoding("UTF-8");// 解决linux乱码 根据linux系统的实际编码设置,可以使用命令
									// vi/etc/sysconfig/i18n 查看linux的系统编码

		zip(out, inputFile, "");

		out.close();

		return out;

	}

	private static void zip(ZipOutputStream out, File f, String base)
			throws Exception

	{

		if (f.isDirectory())

		{ // 判断是否为目录

			File[] fl = f.listFiles();

			// out.putNextEntry(new org.apache.tools.zip.ZipEntry(base + "/"));

			// out.putNextEntry(new ZipEntry(base + "/"));

			ZipEntry zipEntry = new ZipEntry(base
					+ System.getProperties().getProperty("file.separator"));

			zipEntry.setUnixMode(755);// 解决linux乱码

			out.putNextEntry(zipEntry);

			// base = base.length() == 0 ? "" : base + "/";

			base = base.length() == 0 ? "" : base
					+ System.getProperties().getProperty("file.separator");

			for (int i = 0; i < fl.length; i++)

			{

				zip(out, fl[i], base + fl[i].getName());

			}

		}

		else

		{ // 压缩目录中的所有文件

			// out.putNextEntry(new org.apache.tools.zip.ZipEntry(base));

			ZipEntry zipEntry = new ZipEntry(base);

			zipEntry.setUnixMode(644);// 解决linux乱码

			out.putNextEntry(zipEntry);

			FileInputStream in = new FileInputStream(f);

			int b;

			while ((b = in.read()) != -1)

			{

				out.write(b);

			}

			in.close();

		}

	}

	private static void unzip(String sourceZip, String destDir)
			throws Exception {

		try {

			Project p = new Project();

			Expand e = new Expand();

			e.setProject(p);

			e.setSrc(new File(sourceZip));

			e.setOverwrite(false);

			e.setDest(new File(destDir));

			/*
			 * ant下的zip工具默认压缩编码为UTF-8编码, 而winRAR软件压缩是用的windows默认的GBK或者GB2312编码
			 * 所以解压缩时要制定编码格式
			 */

			e.setEncoding("UTF-8"); // 根据linux系统的实际编码设置

			e.execute();

		} catch (Exception e) {

			throw e;

		}

	}

}
 

 

分享到:
评论

相关推荐

    zip解压缩乱码的解决方案

    然而,当我们在解压缩ZIP文件时,有时会遇到“乱码”的问题,这通常是由于编码不兼容或者设置不当导致的。本文将深入探讨ZIP解压缩乱码的解决方案,帮助你解决这个问题。 1. **理解字符编码** - 字符编码是计算机...

    Java带密码解压缩RAR压缩包(内附代码)

    首先,我们需要一个库来处理RAR格式,因为Java标准库并不直接支持RAR解压缩。在这种情况下,我们可以使用`java-unrar`库,这是一个基于GNU Crypto的Java RAR工具包。文件名`java-unrar_gnu-crypto`可能就是这个库的...

    java解决zip乱码,查看apk包的包名

    压缩文档: java -jar spanner.jar zip &lt;path&gt; 解压文档: java -jar spanner.jar unzip &lt;file&gt; 查看apk信息: java -jar apk 查看apk包名: java -jar info | file&gt; ...解压缩文档主要解决在linux下的乱码问题

    解压jar,zip,压缩支持中文zip

    在IT行业中,压缩和解压缩文件是常见的操作,特别是在处理大型项目或传输大量数据时。本文将详细讨论如何解压`jar...无论是在命令行还是编程环境中,遵循这些步骤都可以有效地解决解压缩过程中可能出现的中文乱码问题。

    Java处理中文文件名-压缩中文名字的文件.rar

    解压缩时,同样需要检查和处理编码: ```java ZipInputStream zipIn = new ZipInputStream(new FileInputStream("output.zip")); zipIn.setEncoding("UTF-8"); // 设置编码 ZipEntry entry; while ((entry = zipIn....

    kaiti_GB2312.zip

    用户通常需要使用解压缩软件(如WinRAR、7-Zip等)来打开并提取ZIP文件中的内容。 在本例中,“kaiti_GB2312.rar”是一个RAR文件,RAR是一种类似ZIP的压缩格式,由RARLAB开发。RAR通常提供更高的压缩率,支持恢复...

    Java压缩中文文件名的文件

    在Java编程中,处理中文文件名的压缩与解压缩任务可能会遇到一些挑战,因为中文字符在不同的编码格式下表示方式不同,可能导致乱码问题。本文将深入探讨如何使用Java进行中文文件名的压缩操作,以及涉及到的相关技术...

    jira-fonts-chinese.zip

    "jira-fonts-chinese.zip"的发布考虑到了这一点,它不仅提供了中文显示的解决方案,同时也兼容了多种Linux发行版,使得无论是在Ubuntu、CentOS还是其他Linux环境中,都能顺畅地使用Jira处理中文内容。 安装这个插件...

    李梦恩.rar

    1. **压缩与解压缩**:RAR是一种数据压缩格式,由WinRAR软件支持。用户可以使用WinRAR、7-Zip等工具来创建、查看和提取RAR文件。理解如何使用这些工具是基础的IT技能。 2. **版本控制**:如果"李梦恩"是一个项目,...

    AXMLPrinter2.rar

    在使用`AXMLPrinter2`之前,首先需要解压APK文件,这通常可以通过任何常见的压缩工具完成,例如WinRAR或7-Zip。解压后,找到`AndroidManifest.xml`文件,然后使用`AXMLPrinter2`进行解密。解密过程通常包括以下步骤...

    手机 pdf 阅读器

    阅读设置中增加一个“文件缓存”选项,默认情况下是开启的,在NOKIA手机上会提高UMD等文件的表现,但由于测试并不充足,如果程序经常在阅读时出错,请关闭该选项(其它手机是否开启该选项并无明显的影响) ...

    Tomcat的卸载和重装的实现(图文)

    1. **下载Tomcat**:从Apache官方网站获取最新版本的Tomcat,例如`apache-tomcat-9.0.17-windows-x64.zip`,并将其解压缩到你选择的目录,比如`D:\apache-tomcat-9.0.17`。 2. **设置环境变量**:在“我的电脑”...

    易语言程序免安装版下载

    OpenGL支持库中的部分英文名称常量已改为中文,并统一在所有常量名称之前加前缀“GL_”,以减少与其它库的冲突机率。 3. 互联网支持库中的“FTP目录列表”命令返回的文件时间改为FTP服务器返回的原始时间,不做...

Global site tag (gtag.js) - Google Analytics