知识大全 修改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组件来获取和修改文件的时间信息的方法以达到软件信息的简单加密 谈到文件加
高性能MySQL:只修改.frm文件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 只修改frm
读取并修改App.config文件实例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 向项目添加
创建、查询、修改带名称空间的XML文件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &
在MKV控制系统中,增加变量应修改的文件是()A、IO.ASGB、SITE.ASGC、FACTORY.ASGD、ALLOCSSP.ASG参考答案:ABCD
在MKV控制系统中,增加变量应修改的文件是()A、IO.ASGB、SITE.ASGC、FACTORY.ASGD、ALLOCSSP.ASG参考答案:ABCD
ORACLE的初始化参数文件以及修改方法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! i之前o
重要提示 调整的工作前一定要对数据进行备份切记 基本概念 oracle系统内部给出一个叫作表空间的逻辑磁盘空间早期的系统主要用于存放表的数据所以叫作表空间表空间是一个逻辑空间每个空间至少与一
知识大全 修改Struts2的struts.xml配置文件位置
修改Struts2的struts.xml配置文件位置 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
/** *thisprogramTODO &nb