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文件:

时间: 2024-11-09 00:17:09

zip压缩解决文件名中文乱码问题的相关文章

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

使用apache旗下的commons-compress 压缩和解压zip文件 可以参考我的前一篇博客:http://hw1287789687.iteye.com/blog/1976309 以下是我封装的一个工具类,专门负责zip的压缩和解压  CompressZipUtil: Java代码   package com.common.util;      import java.io.File;   import java.io.FileInputStream;   import java.io.

Java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题_java

废话不多说了,直接给大家贴代码了,具体代码如下所示: //文件上传 public static boolean uploadToFTP(String url,int port,String username,String password,String path,String filename,InputStream input) { boolean success=false; FTPClient ftp=new FTPClient();//org.apache.commons.net.ftp

完美解决mysql中文乱码的问题

mysql|sql|解决|问题|中文乱码 *MySQL(和PHP搭配之最佳组合)中文乱码的原因 MySQL(和PHP搭配之最佳组合)会出现中文乱码的原因不外乎下列几点: -MySQL(和PHP搭配之最佳组合) server本身设定问题,例如还停留在latin1 -MySQL(和PHP搭配之最佳组合) table的语系设定问题(包含character与collation) -客户端程式(例如php)的连线语系设定问题 在之前的两篇文章中已介绍过如何设定MySQL(和PHP搭配之最佳组合) serv

escape解决AJAX中文乱码的简单方法

在使用AJAX开发网站时,经常有朋友遇到乱码的问题,而且一下子难以找到解决方法.其实解决AJAX中文乱码问题很简单. 1.服务端程序: <% liststr="AJAX中文乱码的简单解决方法" sponse.write escape(liststr) '用escape编码 %> 2.客户端JAVASCRIPT程序 function toserver(url) { var req = new XMLHttpRequest(); if (req) { req.onreadyst

hadoop删除文件报错“NullPointException” 文件路径中文件名中文乱码

问题描述 hadoop删除文件报错"NullPointException" 文件路径中文件名中文乱码 大家好,我想请教一下关于hadoop文件删除的问题,希望有大牛在空闲之余给予指导. 问题描述:之前别的用户通过hadoop上传了文件,由于编码问题,之前人家上传的文件名读取出来 为中文乱码,例如:fileUrl==========hdfs://localhost:9000/user11417591508779_???????.docx, 现在我想删除这些乱码文件,由于文件路径中包含中文

java中文乱码之解决URL中文乱码问题的方法_java

我们主要通过两种形式提交向服务器发送请求:URL.表单.而表单形式一般都不会出现乱码问题,乱码问题主要是在URL上面.通过前面几篇博客的介绍我们知道URL向服务器发送请求编码过程实在是实在太混乱了.不同的操作系统.不同的浏览器.不同的网页字符集,将导致完全不同的编码结果.如果程序员要把每一种结果都考虑进去,是不是太恐怖了?有没有办法,能够保证客户端只用一种编码方法向服务器发出请求? 有!这里我主要提供以下几种方法 一.javascript使用javascript编码不给浏览器插手的机会,编码之后

解决phpmyadmin中文乱码问题。。。_php技巧

解决phpmyadmin中文乱码问题... 去phpMyAdmin的根目录下,打开以下这个文件: libraries/select_lang.lib.php 1.找到有"zh-gb2312"的那一行,把'zh-gb2312' 改成 'zh-gb2312-utf-8' 为什么这样加?那是因为服务器会把没有"-utf-8"的语言过滤掉,在libraries/database_interface.lib.php 第168行,根据英文说:"为了防止混淆"

php 中解决json中文乱码的函数

php教程自带了json_encode来处理json数据,那么它们对中文的支持不好,下面我们来看个实例 echo json_encode(array(123213,'中国')); {"platformid":"123213","userid":"1023","username":"u00b7u00f0u00b5u00b2u00c9u00b1u00b7u00f0u00ccu00fc"} 我

谈谈为JAXB和response设置编码,解决wechat4j中文乱码的问题_java

如果有哪一个做程序员的小伙伴说自己没有遇到中文乱码问题,我是不愿意相信的.今天在做微信订阅号的智能回复时,又一时迷乱的跳进了中文乱码这个火坑.刚解决问题时,都欢呼雀跃了,完全忘记了她曾经带给我的痛苦. 一.问题描述 看到没,红色框框内的乱码赤裸裸的对我进行挑衅,而我却无可奈何,真是糟糕透顶. 二.寻求解决之道 面对问题,只有拿着刀逼自己去解决啊,能怎么样呢? 首先,必须搞清楚微信智能回复的机制,画图如下: ps,工具用得不好,请见谅. 接下来,我们抓重点,看乱码重要发生在什么位置. 1.cont