zip压缩解决文件名中文乱码问题

简介:

使用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配置如下:

Xml代码   收藏代码
  1. <dependency>  
  2.             <groupId>org.apache.commons</groupId>  
  3.             <artifactId>commons-compress</artifactId>  
  4.             <version>1.5</version>  
  5.         </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

Java代码   收藏代码
  1. package com.jn.test;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileNotFoundException;  
  5. import java.io.FileOutputStream;  
  6. import java.io.IOException;  
  7.   
  8. import org.apache.commons.compress.archivers.ArchiveException;  
  9. import org.apache.commons.compress.archivers.ArchiveOutputStream;  
  10. import org.apache.commons.compress.archivers.ArchiveStreamFactory;  
  11. import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;  
  12. import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;  
  13. import org.junit.Test;  
  14.   
  15. import com.common.util.SystemUtil;  
  16. import com.io.hw.file.util.FileUtils;  
  17.   
  18. public class ZIPTest {  
  19.   
  20.     @Test  
  21.     public void test_01() {  
  22.         try {  
  23.             FileOutputStream fou = new FileOutputStream("d:\\Temp\\a\\a\\b\\c.zip");  
  24.             ArchiveOutputStream archOuts = new ArchiveStreamFactory()  
  25.                     .createArchiveOutputStream(ArchiveStreamFactory.ZIP, fou);  
  26.             if(archOuts instanceof ZipArchiveOutputStream){  
  27.                 ZipArchiveOutputStream zipOut=(ZipArchiveOutputStream)archOuts;  
  28.                 String file="D:\\Temp\\a\\password_密码.xls";  
  29.                 ZipArchiveEntry zipEntry=new ZipArchiveEntry(new File(file),SystemUtil.getFileSimpleName(file));  
  30.                 zipOut.putArchiveEntry(zipEntry);  
  31.                 zipOut.write(FileUtils.readBytes4file(file));  
  32.                   
  33.                 zipOut.closeArchiveEntry();  
  34.                 zipOut.flush();  
  35.                 zipOut.finish();  
  36.             }  
  37.         } catch (FileNotFoundException e) {  
  38.             e.printStackTrace();  
  39.         } catch (ArchiveException e) {  
  40.             e.printStackTrace();  
  41.         } catch (IOException e) {  
  42.             e.printStackTrace();  
  43.         }  
  44.     }  
  45. }  

 运行之后会生成文件d:\\Temp\\a\\a\\b\\c.zip:

 

(1)压缩多个文件:

Java代码   收藏代码
  1. @Test  
  2.     public void test_02() {  
  3.         try {  
  4.             FileOutputStream fou = new FileOutputStream(  
  5.                     "d:\\Temp\\a\\a\\b\\c.zip");  
  6.             ArchiveOutputStream archOuts = new ArchiveStreamFactory()  
  7.                     .createArchiveOutputStream(ArchiveStreamFactory.ZIP, fou);  
  8.             if (archOuts instanceof ZipArchiveOutputStream) {  
  9.                 ZipArchiveOutputStream zipOut = (ZipArchiveOutputStream) archOuts;  
  10.   
  11.                 String file01 = "D:\\Temp\\a\\password_密码.xls";  
  12.                 ZipArchiveEntry zipEntry = new ZipArchiveEntry(  
  13.                         new File(file01), SystemUtil.getFileSimpleName(file01));  
  14.                 zipOut.putArchiveEntry(zipEntry);  
  15.                 zipOut.write(FileUtils.readBytes4file(file01));  
  16.   
  17.                 String file02 = "D:\\Temp\\a\\ccc.jar";  
  18.                 ZipArchiveEntry zipEntry2 = new ZipArchiveEntry(  
  19.                         new File(file01), SystemUtil.getFileSimpleName(file02));  
  20.                 zipOut.putArchiveEntry(zipEntry2);  
  21.                 zipOut.write(FileUtils.readBytes4file(file02));  
  22.   
  23.                 zipOut.closeArchiveEntry();  
  24.                 zipOut.flush();  
  25.                 zipOut.finish();  
  26.             }  
  27.         } catch (FileNotFoundException e) {  
  28.             e.printStackTrace();  
  29.         } catch (ArchiveException e) {  
  30.             e.printStackTrace();  
  31.         } catch (IOException e) {  
  32.             e.printStackTrace();  
  33.         }  
  34.     }  

 压缩后的zip文件:

相关文章
|
6月前
|
Java
Java将指定文件/文件夹压缩成zip、rar压缩文件--解決中文乱码
Java将指定文件/文件夹压缩成zip、rar压缩文件--解決中文乱码
217 0
|
7月前
|
算法 Linux
Gzip是一种广泛使用的文件压缩程序
【4月更文挑战第28天】Gzip是一种广泛使用的文件压缩程序
92 2
convmv命令对文件名进行编码转换
convmv命令对文件名进行编码转换
244 0
文件解压缩后是乱码怎么办
文件解压缩后是乱码怎么办
161 0
|
算法 Java Linux
GZIP压缩字符串
GZIP压缩字符串
216 0
|
算法 Java Linux
GZIP压缩字符串2
GZIP压缩字符串2
118 0
7zip压缩zip格式时文件名支持中文的设置
7zip压缩zip格式时文件名支持中文的设置
135 0
7zip压缩zip格式时文件名支持中文的设置
win10系统下载文件、解压缩文件时文件名称乱码的问题解决方法
win10系统下载文件、解压缩文件时文件名称乱码的问题解决方法
win10系统下载文件、解压缩文件时文件名称乱码的问题解决方法
根据url下载文件为zip格式文件到客户端并解决火狐浏览器中文乱码问题
根据文件的远程路径将多文件合并成zip压缩包,然后下载到客户端,并解决火狐浏览器中文文件名乱码问题,下面是代码。
315 0