使用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文件:
相关推荐
从其他网站上下载的库,修改了字符串编码转换的方法,解决中文乱码问题,使用示例可见https://blog.csdn.net/qq_28742901/article/details/116156457
项目中碰到问题.jdk zipEntry 压缩中文文件名乱码 上网查了下,有两种方法,一种修改jdk ZipInputStream及ZipOutputStream 的源文件,比较麻烦,不建议此项. 第二种 就是拿来主义,因为 开源项目 Ant 里已经有...
读取zip文件,不解压缩直接解析,支持文件名中文,解决内容乱码(还是以支付宝对账单为例)
应用SharpCompress0.22开源包进行文件的解压缩(zip,rar文件),已处理中文乱码问题,例子很基础.源码环境 VS2017 15.3 .
CompresszZipFile 中带是 zip解压 ZipFileUtil 是文件的压缩 和rar的解压
* @param zipFileName 压缩产生的zip包文件名--带路径,如果为null或空则默认按文件名生产压缩文件名 * @param relativePath 相对路径,默认为空 * @param directory 文件或目录的绝对路径 * void */ ...
java中使用ZipEntry对文件目录下的所有文件进行压缩,已解决中文乱码问题,亲测可用,请放心下载。
ICSharpCode.SharpZipLib压缩解决中文乱码dll和代码
用java.util.zipoutputstream压缩会出现中文的文件名乱码的情况,且无法设置字符集,这个版本用org.apache.tools.zip.ZipOutputStream压缩,可以自定义字符集,解决中文的文件名乱码问题。
这个名是名离自ant原码的,由于java.util.zip处理中文文件名时有问题可以用这个包代替那个使用就不会有中文问题了,我加了一个ZipTool.java,这个就是一个示例文件和方法打包文件。 <br>特点: 一、自有原码不...
本篇文章主要介绍了解决Java原生压缩组件不支持中文文件名乱码的问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
在日本经常使用zip或者lha格式的压缩包,在中文系统下解压时,如果压缩包里的文件是日语名,虽然能正常解压,但是解出的文件会变成乱码。这实际上是日语系统使用Shift-JIS编码,在中文系统下解压时按照GB编码显示...
通过对JDK的java.util.zip下的ZipInputStream和ZipOutputStream类进行改造,彻底解决压缩和解压缩文件时的中文文件名乱码问题。 包含已大好的jar包,以及一个如何使用的Demo程序。
这几天做一个操作docx的文档的功能,Apache的POI功能有限,就参考了相关资料写的一个Java压缩和解压zip文件的工具类。全部使用的是Java自带的类库,中文的文件名会有乱码的问题。
1、指定文件可下载并且服务器端会删除此文件。 2、指定文件夹(文件夹中必须有一个文件),程序会自动的压缩文件为 zip,然后下载删除源文件与压缩文件...注意一点:中文的文件名会出现乱码(解决方案:导入ant.jar)
QT下对资源的压缩解压缩,这个是Quazip源码和zlib源码,用法如下: // 压缩文件夹 JlCompress::compressDir("F:\\QuaZip.zip", "F:\\QuaZip"); // 解压缩文件夹 JlCompress::extractDir("F:\\QuaZip.zip", "F:\\...
给大家介绍了如何利用python解决Fedora解压zip时中文乱码的方法,对大家具有一定参考借鉴价值,有需要的朋友们可以参考学习,下面来一起看看吧。
特点及功能介绍: <br>支持单文件下载。支持多文件zip压缩下载。多文件zip压缩可在服务器保留或者删除副本。... 日文系统下文件名是中文时出现乱码问题。 处理前需要进行相对繁琐的设定。
PHP项目中遇到zip 增加压缩文件中 文件名带有中文的 出现乱码。也是找了许久原因,本地可以单传到线上不可以当时也是一脸懵逼。希望能解决你的疑惑。
ZArchiver是一款强大的压缩和解压缩软件,支持rar,zip,7z等等,不像androidzip一样解压7z错误,还支持带密码的rar压缩文件,支持中文文件名,(这是安卓上唯一的),支持rar,zip,7z的解压,还支持带密码的解压缩...