知识大全 修改ZipInputStream支持中文名文件解压

Posted 档案

篇首语:我贪钱,大概是因为卑微到泥土里,只有它能给我一丝安全感吧.本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 修改ZipInputStream支持中文名文件解压相关的知识,希望对你有一定的参考价值。

修改ZipInputStream支持中文名文件解压  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  之前介绍了利用java util zip这个package里的class来完成压缩及解压缩的工作 但是我们知道 java对于文字的编码是以unicode为基础 因此 若是以ZipInputStream及ZipOutputStream来处理压缩及解压缩的工作 碰到中文档名或路径 那当然是以unicode来处理罗!     但是 现在市面上的压缩及解压缩软体 例如winzip 却是不支援unicode的 一碰到档名以unicode编码的档案 它就不处理     那要如何才能做出让winzip能够处理的压缩档呢?那就得从修改ZipInputStream及ZipOutputStream对于档名的编码方式来着手了 我们可以从jdk的src zip取得ZipInputStream及ZipOutputStream的原始码来加以修改      一 ZipOutputStream java    从jdk的src zip取得ZipOutputStream java原始码 另存新档存到c:\\java\\util\\zip这个资料夹里 档名改为CZipOutputStream java    开始修改原始码 将class名称改为CZipOutputStream    建构式也必须更改为CZipOutputStream    新增member 这个member记录编码方式    private String encoding= UTF ;    再新增一个建构式(这个建构式可以让这个class在new的时候 设定档名的编码)    public CZipOutputStream(OutputStream out String encoding)      super(out new Deflater(Deflater DEFAULT_PRESSION true));      usesDefaultDeflater = true;      this encoding=encoding;        找到byte[] nameBytes = getUTF Bytes(e name);(有二个地方) 将它修改如下    byte[] nameBytes = null;    try         if (this encoding toUpperCase() equals( UTF ))       nameBytes =getUTF Bytes(e name);     else       nameBytes= e name getBytes(this encoding);        catch(Exception byteE)         nameBytes=getUTF Bytes(e name);        将档案储存在c:\\java\\util\\zip这个资料夹内 请记得一定要有这个路径结构 才能把CZipOutputStream class放在正确的package结构里      二 ZipInputStream java    从jdk的src zip取得ZipInputStream java原始码 另存新档存到c:\\java\\util\\zip这个资料夹里 档名改为CZipInputStream java    开始修改原始码 将class名称改为CZipInputStream    建构式也必须更改为CZipInputStream    新增member 这个member记录编码方式    private String encoding= UTF ;    再新增一个建构式如下(这个建构式可以让这个class在new的时候 设定档名的编码)   public CZipInputStream(InputStream in String encoding)    super(new PushbackInputStream(in ) new Inflater(true) );    usesDefaultInflater = true;    if(in == null)       throw new NullPointerException( in is null );        this encoding=encoding;         找到ZipEntry e = createZipEntry(getUTF String(b len));这一行 将它改成如下   ZipEntry e=null;   try       if (this encoding toUpperCase() equals( UTF ))      e=createZipEntry(getUTF String(b len));    else      e=createZipEntry(new String(b len this encoding));      catch(Exception byteE)       e=createZipEntry(getUTF String(b len));       将档案储存在c:\\java\\util\\zip这个资料夹内 请记得一定要有这个路径结构 才能把CZipInputStream class放在正确的package结构里     以上两个档案储存后pile产生CZipOutputStream class及CZipInputStream class 使用winzip开启[java_home]\\jre\\lib\\rt jar这个档案 将CZipOutputStream class及CZipInputStream class加进去 记得「Save full path info」一定要打勾 以后当压缩及解压缩时有中文档名及路径的问题时 就可以指定编码方式来处理了     CZipOutputStream zos=new CZipOutputStream(OutputStream os String encoding);  CZipInputStream zins=new CZipInputStream(InputStream ins String encoding);  以「压缩与解压缩( )」为例   FileOutputStream fos =new FileOutputStream(request getRealPath( / )+ myzip zip );  CZipOutputStream zos=new CZipOutputStream(fos BIG );  其他地方都不用改 便可以处理中文档名的压缩 cha138/Article/program/Java/JSP/201311/19592

相关参考

知识大全 用修改文件时间的方法来加密文件

 [摘要]  本文介绍了在Delphi中利用系统函数和WindowsAPI函数配合Delphi中的DataTimePicker组件来获取和修改文件的时间信息的方法以达到软件信息的简单加密  谈到文件加

知识大全 只修改.frm 文件

高性能MySQL:只修改.frm文件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  只修改frm

知识大全 读取并修改App.config文件实例

读取并修改App.config文件实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  向项目添加

知识大全 创建、查询、修改带名称空间的XML文件

创建、查询、修改带名称空间的XML文件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &

在MKV控制系统中,增加变量应修改的文件是()

在MKV控制系统中,增加变量应修改的文件是()A、IO.ASGB、SITE.ASGC、FACTORY.ASGD、ALLOCSSP.ASG参考答案:ABCD

在MKV控制系统中,增加变量应修改的文件是()

在MKV控制系统中,增加变量应修改的文件是()A、IO.ASGB、SITE.ASGC、FACTORY.ASGD、ALLOCSSP.ASG参考答案:ABCD

知识大全 ORACLE的初始化参数文件以及修改方法

ORACLE的初始化参数文件以及修改方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  i之前o

知识大全 修改oracle的数据文件

  重要提示  调整的工作前一定要对数据进行备份切记  基本概念  oracle系统内部给出一个叫作表空间的逻辑磁盘空间早期的系统主要用于存放表的数据所以叫作表空间表空间是一个逻辑空间每个空间至少与一

知识大全 修改Struts2的struts.xml配置文件位置

修改Struts2的struts.xml配置文件位置  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 用java线程实现批量修改文件名

   /**      *thisprogramTODO    &nb