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

java 压缩包 文件名乱码问题解决

 
阅读更多
搞半天了,终于在网上找到了这个解决方法。
压缩代码
/**
	 * @param path
	 *            要压缩的路径, 可以是目录, 也可以是文件.
	 * @param basePath
	 *            如果path是目录,它一般为new File(path), 作用是:使输出的zip文件以此目录为根目录,
	 *            如果为null它只压缩文件, 不解压目录.
	 * @param zo
	 *            压缩输出流
	 * @param isRecursive
	 *            是否递归
	 * @param isOutBlankDir
	 *            是否输出空目录, 要使输出空目录为true,同时baseFile不为null.
	 * @throws IOException
	 */
	public static void zip(String path, File basePath, ZipOutputStream zo,
			boolean isRecursive, boolean isOutBlankDir) throws IOException {

		File inFile = new File(path);

		File[] files = new File[0];
		if (inFile.isDirectory()) { // 是目录
			files = inFile.listFiles();
		} else if (inFile.isFile()) { // 是文件
			files = new File[1];
			files[0] = inFile;
		}
		byte[] buf = new byte[1024];
		int len;
		// System.out.println("baseFile: "+baseFile.getPath());
		for (int i = 0; i < files.length; i++) {
			String pathName = "";
			if (basePath != null) {
				if (basePath.isDirectory()) {
					pathName = files[i].getPath().substring(
							basePath.getPath().length() + 1);
				} else {// 文件
					pathName = files[i].getPath().substring(
							basePath.getParent().length() + 1);
				}
			} else {
				pathName = files[i].getName();
			}
			if (files[i].isDirectory()) {
				if (isOutBlankDir && basePath != null) {
					zo.putNextEntry(new ZipEntry(pathName + "/")); // 可以使空目录也放进去
				}
				if (isRecursive) { // 递归
					zip(files[i].getPath(), basePath, zo, isRecursive,
							isOutBlankDir);
				}
			} else {
				FileInputStream fin = new FileInputStream(files[i]);
				zo.putNextEntry(new ZipEntry(pathName));
				while ((len = fin.read(buf)) > 0) {
					zo.write(buf, 0, len);
				}
				fin.close();
			}
		}
		inFile = null;
		files = null;
	}

/**
	 * 
	 * 压缩电子文件为ZIP包
	 * 
	 * @param directory
	 *            需要压缩的目录
	 * @param zipFileName
	 *            ZIP压缩文件完整路径名
	 * @return
	 */
	public static boolean expZip(String directory, String zipFileName) {
		boolean bool = false;
		try {
			File file = new File(directory);
			boolean validate = zipFileName.toLowerCase().endsWith(".zip");
			if (!file.exists() || !validate || !file.isDirectory()) {
				return false;
			} else {

				directory = directory.replace(File.separatorChar, '/');
				zipFileName = zipFileName.replace(File.separatorChar, '/');
				int x = zipFileName.lastIndexOf("/");
				if (x <= -1) {
					return false;
				} else {
					String zipdir = zipFileName.substring(0, x);
					File zipdirs = new File(zipdir);
					zipdirs.mkdirs();
					zipdirs = null;
				}

				OutputStream os = new FileOutputStream(zipFileName);
				BufferedOutputStream bs = new BufferedOutputStream(os);
				ZipOutputStream zo = new ZipOutputStream(bs);
//[color=red]些句相当重要[/color] 				
zo.setEncoding(System.getProperty("sun.jnu.encoding"));
				ZipOption.zip(directory, new File(directory), zo, true, true);
				zo.closeEntry();
				zo.close();
				bs.close();
				os.close();

				File exit = new File(zipFileName);
				bool = exit.exists();
				exit = null;
			}
			file = null;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		return bool;
	}

解压缩代码
/**
	 * 解压ZIP文件
	 * 
	 * @param zipFileName
	 *            String 为需要解压的zip文件
	 * @param extPlace
	 *            String 为解压后文件的存放路径
	 */
	public static void extZipFileList(String zipFileName, String extPlace)
			throws Exception {
		// 验证ZIP压缩文件是否有效
		File fileZip = new File(zipFileName);
		boolean exists = fileZip.exists();// 判断文件/文件夹是否存在
		if (exists) {
			// 创建extPlace目录
			File dirs = new File(extPlace);
			dirs.mkdirs();
			dirs = null;
			// 请空目录
			ZipFile zipFile = null;
			try {
				//[color=red]些句相当重要[/color]
				System.setProperty("sun.zip.encoding",System.getProperty("sun.jnu.encoding"));
				zipFile = new ZipFile(zipFileName);
				FileInputStream zin = new FileInputStream(zipFileName);
				ZipInputStream zis = new ZipInputStream(zin);
				//这里必需用jdk自带的ZipEntry
				java.util.zip.ZipEntry zipEntry = zis.getNextEntry();
				while (zipEntry != null) {
					String entryName = zipEntry.getName().replace(
							File.separatorChar, '/');
					String names[] = entryName.split("/");
					int length = names.length;
					String path = extPlace;
					for (int v = 0; v < length; v++) {
						if (v < length - 1) {
							path += names[v] + "/";
							new File(path).mkdir();
						} else { // 最后一个
							if (entryName.endsWith("/")) { // 为目录,则创建文件夹
								new File(extPlace + entryName).mkdir();
							} else {
								FileOutputStream fos = new FileOutputStream(
										extPlace + entryName);
								int len;
								byte[] buffer = new byte[1024];
								while ((len = zis.read(buffer)) > 0) {
									fos.write(buffer, 0, len);
								}
								fos.close();
							}
						}
					}
					zis.closeEntry();
					zipEntry = zis.getNextEntry();
				}
			} catch (Exception e) {
				e.printStackTrace();
				if (zipFile != null)
					zipFile.close();
			}
			if (zipFile != null)
				zipFile.close();
		} else {

		}
		fileZip = null;
	}
分享到:
评论

相关推荐

    Java中压缩与解压--中文文件名乱码解决办法

    ### Java中压缩与解压——中文文件名乱码解决办法 #### 一、问题背景及原理分析 在Java中处理文件的压缩与解压时,经常会遇到中文文件名出现乱码的问题。这个问题主要源于Java中默认使用的编码方式与实际文件名...

    详解关于java文件下载文件名乱码问题解决方案

    Java文件下载文件名乱码问题解决方案 Java 文件下载文件名乱码问题是指在下载 Java 文件时,文件名出现乱码现象,影响下载文件的正确性。这种问题通常有两种情况:一是下载时中文文件名乱码,二是下载时因为路径中...

    java下载时文件名乱码

    在Java编程中,遇到“java下载时文件名乱码”的问题通常是由于编码不一致或处理不当造成的。在处理文件下载时,尤其是从Web服务器下载带有非ASCII字符的文件名时,这种问题尤为常见。让我们深入探讨这个问题,并提供...

    Java实现文件下载并解决中文文件名乱码

    本文将详细介绍如何使用Java实现文件下载功能,并重点讲解如何解决中文文件名乱码的问题。 #### 一、基本原理与步骤 1. **读取文件**:首先需要将要下载的文件读取到内存中。 2. **设置响应头**:为了正确地告知...

    jsch-0.1.53 使用sftp协议上传下载文件名中文乱码解决办法

    jsch-0.1.53 不支持修改编码格式,sftp.setFilenameEncoding("GBK");这样修改是不起作用的,所以必须修改源码。此处是修改源码后重新导出的jar包。

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

    在Java编程中,处理压缩和解压缩ZIP文件是一项常见的任务,尤其当文件中包含中文字符时,可能会遇到中文乱码的问题。这是因为Java的标准库在处理非ASCII编码时可能存在不足。本篇文章将详细介绍如何使用Java标准库...

    解决jsmartcom中文文件名上传与下载乱码问题

    总之,解决JSmartCom的中文文件名乱码问题,不仅需要深入理解JavaScript和HTTP的字符编码机制,还需要对JSmartCom的源码有充分的认识,以便定位和修改关键代码。通过以上所述的步骤和方法,你应该能够成功地克服这个...

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

    通过上述步骤,可以实现基于Java向ZIP压缩包追加文件的功能,虽然这个过程涉及解压和再压缩,但它是最常见的解决方案,因为Java的标准库不直接支持追加操作。在实际应用中,可以根据具体需求进行优化和调整,以满足...

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

    `ZipUtil`是一个专门用于文件压缩的工具类,它解决了在处理包含中文字符的文件或目录时可能出现的乱码问题。`ZipEntry`是Java标准库`java.util.zip`包中的核心类,用于表示ZIP文件中的一个条目,它可以是文件或目录...

    用java对文件进行压缩并且解决乱码问题

    总的来说,使用Java的`ZipOutputStream`进行文件压缩时,必须注意文件名和路径的正确编码,以避免乱码问题。通过使用合适的编码方式(如UTF-8)并在`ZipOutputStream`构造函数中明确指定,可以确保在跨平台操作时...

    解决HttpClient中文乱码问题jar文件

    以下是一些解决HttpClient中文乱码问题的关键知识点: 1. **设置字符编码**:在发送HTTP请求时,我们需要确保请求头中的`Content-Type`字段指定了正确的字符集,如`application/x-www-form-urlencoded; charset=UTF...

    ftpserver-core-1.1.1.jar-GBK字符集.zip_______IE访问Apache Ftp Server 中文目录、中文文件名,乱码解决

    Apache Ftp Server是一个广泛使用的开源FTP服务器,但在处理中文目录和文件名时可能会出现乱码问题,这主要是由于字符编码不兼容导致的。本篇文章将详细探讨这个问题以及如何通过GBK字符集来解决。 首先,FTP(File...

    JavaWeb开发中文乱码问题解决方案

    1. **字符编码基础**:理解字符编码是解决问题的第一步。常见的字符集有GBK、GB2312(简体中文)、Big5(繁体中文)以及Unicode家族的UTF-8、UTF-16等。UTF-8是一种变长编码,可以兼容全世界几乎所有的字符,因此在...

    java 上传、下载 组建(源码) 彻底解决乱码问题。

    总之,这个“java 上传、下载 组建”提供了全面的文件上传解决方案,特别是对于中文文件名乱码的处理,使得开发者可以更专注于业务逻辑,而无需担忧底层的编码问题。通过深入理解并使用这个源码,可以提高Java Web...

    Android 解压,解决乱码问题

    在Android平台上进行文件解压操作时,可能会遇到文件名或文件内容出现乱码的问题。这主要是由于编码格式不兼容导致的。以下是一些关键知识点,帮助开发者理解和解决Android解压过程中的乱码问题: 1. **编码理解**...

    java压缩包解压

    本文将深入探讨如何在Java中实现解压缩功能,以及解决在处理包含中文文件名时可能出现的乱码问题。 首先,Java提供了`java.util.zip`包,它包含了处理ZIP文件的相关类。我们主要使用`ZipInputStream`和`ZipEntry`来...

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

    如果遇到中文文件名显示乱码的问题,你可能需要尝试调整字符编码设置或者使用其他支持Unicode的压缩库。 总的来说,处理带密码的RAR文件在Java中可以通过第三方库实现,这些库通常会提供API来设置密码和处理解压缩...

    java .net php .js 乱码转换器

    标题中的“java .net php .js 乱码转换器”是一个工具,旨在解决跨平台、跨语言编码不兼容导致的乱码问题。这个工具支持Java、.NET(C#、VB.NET等)、PHP以及JavaScript这四种广泛使用的编程语言,帮助开发者在处理...

    java 打zip包

    本资源提供了一种解决方案,解决了使用Java打zip包时可能会遇到的中文乱码和包含空文件的问题。以下是关于这个主题的一些关键知识点: 1. **Java的 ZIP API**:Java标准库提供了一个名为`java.util.zip`的包,它...

    解决jsp页面中文乱码问题

    当处理文件上传时,确保文件名和内容的编码与服务器端一致,否则可能出现乱码问题。 9. **国际化与本地化** 如果涉及多语言支持,正确配置`ResourceBundle`和`.properties`文件的编码也很重要。 通过以上步骤,...

Global site tag (gtag.js) - Google Analytics