注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

北漂的小羊

Java编程,开发者,程序员,软件开发,编程,代码。新浪微博号:IT国子监

 
 
 

日志

 
 
关于我

在这里是面向程序员的高品质IT技术学习社区,是程序员学习成长的地方。让我们更好地用技术改变世界。请关注新浪微博号: IT国子监(http://weibo.com/itguozijian)

网易考拉推荐

zip压缩中文文件名(支持压缩文件或者文件夹)(解决中文乱码问题)  

2013-02-04 20:56:04|  分类: JAVA |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


新浪微博:IT国子监(记得关注噢) http://weibo.com/itguozijian


最近项目中用到中文文件(名)的文件压缩功能,发现java的基本zip库是不支持中文文件名的。参考了网上的一些解决方法,但大多存在问题,后来发现Ant的apache tools下的zip库是支持中文的。下面就是采用该方式实现的在中文文件名下的文件压缩代码:

在给出实现代码之前,有一点需要指出,那就是必须要在工程中引入Ant.jar的包,否则会导致编译无法通过。

Java代码 
  1. /** 
  2.  *  
  3.  */  
  4. import java.io.BufferedOutputStream;  
  5. import java.io.BufferedReader;  
  6. import java.io.File;  
  7. import java.io.FileInputStream;  
  8. import java.io.FileOutputStream;  
  9. import java.io.IOException;  
  10. import java.io.InputStreamReader;  
  11. import java.util.zip.CRC32;  
  12. import java.util.zip.CheckedOutputStream;  
  13.   
  14. import org.apache.tools.zip.ZipEntry;  
  15. import org.apache.tools.zip.ZipOutputStream;  
  16.   
  17. /** 
  18.  * @author XL 
  19.  *  
  20.  */  
  21. public class ZipUtil  
  22. {  
  23.   
  24.     /** 
  25.      * @param args 
  26.      */  
  27.     public static void main(String[] args)  
  28.     {  
  29.         zip("D:\\110.zip","D:\\110");  
  30.     }  
  31.   
  32.     /** 
  33.      * 由于java.util.zip.ZipOutputStream有中文乱码问题, 
  34.      * 所以采用org.apache.tools.zip.ZipOutputStream。 
  35.      */  
  36.     public static void zip(String zipFileName,String srcFileName)  
  37.     {  
  38.         try  
  39.         {       
  40.             // 创建文件输出流对象  
  41.             FileOutputStream f = new FileOutputStream(new File(zipFileName));  
  42.   
  43.             CheckedOutputStream ch = new CheckedOutputStream(f, new CRC32());  
  44.             // 创建ZIP数据输出流对象  
  45.             ZipOutputStream zipOut = new ZipOutputStream(  
  46.                     new BufferedOutputStream(ch));  
  47.             // 调用打包的方法  
  48.             zip(zipOut,srcFileName);  
  49.             // 关闭创建的流对象  
  50.             zipOut.close();  
  51.         }  
  52.         catch (Exception e)  
  53.         {  
  54.             System.out.println(e);  
  55.         }  
  56.     }  
  57.       
  58.     /** 
  59.      * 递归zip 
  60.      * @param zipOut 
  61.      * @param fileName 
  62.      * @throws IOException 2009-9-24 
  63.      */  
  64.     public static void zip(ZipOutputStream zipOut, String fileName) throws IOException  
  65.     {  
  66.         File srcFileName = new File(fileName);  
  67.         if (srcFileName.isDirectory())  
  68.         {  
  69.             // 如果是文件夹,遍历下面的文件  
  70.             File[] files = srcFileName.listFiles();  
  71.             for (File file : files)  
  72.             {  
  73.                 zip(zipOut,file.getAbsolutePath());  
  74.             }              
  75.         }  
  76.         else  
  77.         {  
  78.             // 创建文件输入流对象  
  79.             String encode = "ISO8859_1";  
  80.             BufferedReader in = new BufferedReader(new InputStreamReader(  
  81.                     new FileInputStream(srcFileName), encode));  
  82.             // 创建指向压缩原始文件的入口  
  83.             ZipEntry entry = new ZipEntry(srcFileName.getName());  
  84.             zipOut.putNextEntry(entry);  
  85.             // 向压缩文件中输出数据  
  86.             int nNumber;  
  87.             while ((nNumber = in.read()) != -1)  
  88.             {  
  89.                 zipOut.write(nNumber);  
  90.             }  
  91.             in.close();  
  92.         }  
  93.     }  
  94. }  

  评论这张
 
阅读(1891)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016