使用jdk自带的zip工具类java.util.zip.ZipEntry,java.util.zip.ZipFile,java.util.zip.ZipInputStream,java.util.zip.ZipOutputStream 进行zip压缩时,没法解决文件名中文乱码问题
这里使用apache 旗下的commons-compress 库,官网是:http://commons.apache.org/proper/commons-compress/download_compress.cgi
我使用maven 进行构建,pom配置如下:
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-compress</artifactId> <version>1.5</version> </dependency>
commons-compress 解决了文件名中文乱码问题,参考:http://www.cnblogs.com/un4sure/archive/2011/09/27/2193298.html
范例:
(1)压缩单个文件:
压缩D:\\Temp\\a\\password_密码.xls,压缩后的zip文件是d:\\Temp\\a\\a\\b\\c.zip
package com.jn.test; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import org.apache.commons.compress.archivers.ArchiveException; import org.apache.commons.compress.archivers.ArchiveOutputStream; import org.apache.commons.compress.archivers.ArchiveStreamFactory; import org.apache.commons.compress.archivers.zip.ZipArchiveEntry; import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream; import org.junit.Test; import com.common.util.SystemUtil; import com.io.hw.file.util.FileUtils; public class ZIPTest { @Test public void test_01() { try { FileOutputStream fou = new FileOutputStream("d:\\Temp\\a\\a\\b\\c.zip"); ArchiveOutputStream archOuts = new ArchiveStreamFactory() .createArchiveOutputStream(ArchiveStreamFactory.ZIP, fou); if(archOuts instanceof ZipArchiveOutputStream){ ZipArchiveOutputStream zipOut=(ZipArchiveOutputStream)archOuts; String file="D:\\Temp\\a\\password_密码.xls"; ZipArchiveEntry zipEntry=new ZipArchiveEntry(new File(file),SystemUtil.getFileSimpleName(file)); zipOut.putArchiveEntry(zipEntry); zipOut.write(FileUtils.readBytes4file(file)); zipOut.closeArchiveEntry(); zipOut.flush(); zipOut.finish(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (ArchiveException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
运行之后会生成文件d:\\Temp\\a\\a\\b\\c.zip:
(1)压缩多个文件:
@Test public void test_02() { try { FileOutputStream fou = new FileOutputStream( "d:\\Temp\\a\\a\\b\\c.zip"); ArchiveOutputStream archOuts = new ArchiveStreamFactory() .createArchiveOutputStream(ArchiveStreamFactory.ZIP, fou); if (archOuts instanceof ZipArchiveOutputStream) { ZipArchiveOutputStream zipOut = (ZipArchiveOutputStream) archOuts; String file01 = "D:\\Temp\\a\\password_密码.xls"; ZipArchiveEntry zipEntry = new ZipArchiveEntry( new File(file01), SystemUtil.getFileSimpleName(file01)); zipOut.putArchiveEntry(zipEntry); zipOut.write(FileUtils.readBytes4file(file01)); String file02 = "D:\\Temp\\a\\ccc.jar"; ZipArchiveEntry zipEntry2 = new ZipArchiveEntry( new File(file01), SystemUtil.getFileSimpleName(file02)); zipOut.putArchiveEntry(zipEntry2); zipOut.write(FileUtils.readBytes4file(file02)); zipOut.closeArchiveEntry(); zipOut.flush(); zipOut.finish(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (ArchiveException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
压缩后的zip文件:
相关推荐
总之,"zip库(解决文件名中文乱码问题).zip" 是一个专门为C++开发的、修复了中文文件名乱码问题的ZIP操作库。它提供了方便的API接口,使得开发者能够在处理中文文件名时更加得心应手,避免了编码转换带来的困扰。...
项目中碰到问题.jdk zipEntry 压缩中文文件名乱码 上网查了下,有两种方法,一种修改jdk ZipInputStream及ZipOutputStream 的源文件,比较麻烦,不建议此项. 第二种 就是拿来主义,因为 开源项目 Ant 里已经有...
本篇文章将深入探讨如何在Android平台上解决Java ZIP库在解压缩中文文件时出现的乱码问题。 首先,我们要明白乱码问题的根源。在文件的压缩和解压缩过程中,文件名通常被编码为字节序列,这个序列取决于原始文件名...
例如,你可以使用Ant的`<zip>`任务来创建ZIP文件,通过指定`encoding`属性来解决中文乱码问题: ```xml <zip destfile="output.zip" encoding="UTF-8"> **/*"/> </zip> ``` 在这个Ant脚本中,`<zip>`...
本文将深入探讨如何使用SharpCompress这一开源库来处理ZIP和RAR文件,并解决在处理中文文件名时可能出现的乱码问题。 SharpCompress是一款强大的、跨平台的压缩库,支持多种压缩格式,包括ZIP、TAR、GZIP、BZIP2、7...
在Java编程中,处理压缩和解压缩ZIP文件是一项常见的任务,尤其当文件中包含中文字符时,可能会遇到中文乱码的问题。这是因为Java的标准库在处理非ASCII编码时可能存在不足。本篇文章将详细介绍如何使用Java标准库...
这里我们关注的是“文件解压和压缩”以及处理“中文乱码”的问题。在Java编程语言中,提供了多种库和工具来处理这些问题。 首先,`CompresszZipFile`是一个可能的自定义类或方法,它专门用于处理ZIP文件的解压。在...
总的来说,解决中文文件名乱码问题需要从多个角度考虑,包括服务器配置、HTTP头部设置、编码转换以及选择合适的工具。了解并掌握这些知识点,有助于我们在实际工作中更顺畅地处理各种语言环境下的文件下载问题。对于...
总结,ICSharpCode.SharpZipLib通过设置正确的编码参数,可以有效地解决在处理中文文件名时出现的乱码问题。在创建和解压缩ZIP文件时,应特别注意文件名和内容的编码设置,以确保数据的完整性和正确性。
### Java中压缩与解压——中文文件名乱码解决办法 #### 一、问题背景及原理分析 在Java中处理文件的压缩与解压时...通过上述步骤,可以有效地解决Java中压缩与解压时中文文件名乱码的问题,使得程序更加健壮和实用。
本文将深入探讨如何在不解压的情况下直接读取ZIP文件,并特别关注如何处理包含中文文件名和内容乱码的问题。我们将以支付宝对账单为例,因为这类文件通常包含大量敏感和重要的财务信息,正确地读取和解析它们至关...
* @param zipFileName 压缩产生的zip包文件名--带路径,如果为null或空则默认按文件名生产压缩文件名 * @param relativePath 相对路径,默认为空 * @param directory 文件或目录的绝对路径 * void */ ...
本文将详细探讨如何在使用7-Zip软件解压文件时解决中文乱码问题,以及如何在C#编程环境中处理这一问题。 首先,我们需要了解乱码产生的原因。中文乱码通常是因为字符编码不一致导致的。当压缩文件创建时采用了一种...
总之,`ZipUtil`文件压缩工具类通过结合`ZipEntry`和`ZipOutputStream`,提供了一种高效且健壮的解决方案,尤其适合处理包含中文字符的文件和目录,确保在压缩和解压过程中不会出现乱码问题。这对于需要在Java应用...
本文将深入探讨如何使用ZipOutputStream进行文件压缩,并解决可能出现的乱码问题。 首先,我们来看`ZipOutputStream`的基本用法。这个类继承自`FilterOutputStream`,提供了创建ZIP文件的功能。以下是一个简单的...
总之,解决Java压缩ZIP文件中文乱码问题的关键在于使用支持设置编码的第三方库,并在处理中文内容和注释时明确指定正确的字符编码。这样,无论在何种编码环境中,都能确保中文字符正确无误地被压缩和解压。
用java.util.zipoutputstream压缩会出现中文的文件名乱码的情况,且无法设置字符集,这个版本用org.apache.tools.zip.ZipOutputStream压缩,可以自定义字符集,解决中文的文件名乱码问题。
在Java中,Zip压缩组件是原生的压缩工具,但是它不支持中文文件名的编码,这就会导致文件名乱码的问题。 解决这个问题的方法是使用Apache的ant压缩组件,which supports encoding for Chinese file names. Apache...
这个名是名离自ant原码的,由于java.util.zip处理中文文件名时有问题可以用这个包代替那个使用就不会有中文问题了,我加了一个ZipTool.java,这个就是一个示例文件和方法打包文件。 <br>特点: 一、自有原码不...
本文将深入探讨ZIP解压缩乱码的解决方案,帮助你解决这个问题。 1. **理解字符编码** - 字符编码是计算机存储和显示文本的方式,常见的有ASCII、GBK、UTF-8等。不同的编码方式对于特殊字符的表示不同,如果编码不...