欢迎来到天天文库
浏览记录
ID:40558869
大小:52.00 KB
页数:3页
时间:2019-08-04
《Java中压缩与解压》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Java中压缩与解压--中文文件名乱码解决办法收藏本文参阅了台湾JSP学习网部分内容,略有增删.java对於文字的编码是以unicode为基础,因此,若是以ZipInputStream及ZipOutputStream来处理压缩及解压缩的工作,碰到中文档名或路径,那当然是以unicode来处理罗!但是,现在市面上的压缩及解压缩软体,例如winzip,却是不支援unicode的,一碰到档名以unicode编码的档案,它就不处理。那要如何才能做出让WinRar能够处理的压缩档呢?那就得从修改ZipInputStream及ZipO
2、utputStream对於档名的编码方式来着手了。我们可以从jdk的src.zip取得ZipInputStream及ZipOutputStream的原始码来加以修改一、ZipOutputStream.java1.从jdk的src.zip取得ZipOutputStream.java原始码,另存到一个新文件中,档名改为CnZipOutputStream.java。2.开始修改原始码,将class名称改为CnZipOutputStream3.建构式也必须更改为CnZipOutputStream4.新增member,这个membe
3、r记录编码方式 privateStringencoding="UTF-8";5.再新增一个建构式(这个建构式可以让这个class在new的时候,设定档名的编码) publicCZipOutputStream(OutputStreamout,Stringencoding){ this(out); this.encoding=encoding; }6.找到byte[]nameBytes=getUTF8Bytes(e.name);(有二个地方),将它修改如下:1.byte[]nameBytes=null;2. try
4、3. {4. if(this.encoding.toUpperCase().equals("UTF-8"))5. nameBytes=getUTF8Bytes(e.name);1. else2. nameBytes=e.name.getBytes(this.encoding);3. }4. catch(ExceptionbyteE)5. {6. nameBytes=getUTF8Bytes(e.name);7. }二、ZipInputStream.java1.从jdk的src.zip取得ZipInputStream.jav
5、a原始码,另存到一个新文件中,档名改为CnZipInputStream.java。2.开始修改原始码,将class名称改为CnZipInputStream3.建构式也必须更改为CnZipInputStream4.新增member,这个member记录编码方式 privateStringencoding="UTF-8";5.再新增一个建构式如下(这个建构式可以让这个class在new的时候,设定档名的编码)publicCZipInputStream(InputStreamin,Stringencoding){ this(in
6、); this.encoding=encoding;}6.找到ZipEntrye=createZipEntry(getUTF8String(b,0,len));这一行,将它改成如下:1.ZipEntrye=null;2. try3. {4. if(this.encoding.toUpperCase().equals("UTF-8"))5. e=createZipEntry(getUTF8String(b,0,len));6. else1. e=createZipEntry(newString(b,0,len,this.en
7、coding));2. }3. catch(ExceptionbyteE)4. {5. e=createZipEntry(getUTF8String(b,0,len));6. }以上两个档案储存後compile产生CZipOutputStream.class及CZipInputStream.class,使用winzip开启[java_home]jrelibrt.jar这个档案,将CnZipOutputStream.class及CnZipInputStream.class加进去,以後当压缩及解压缩时有中文档名及路径的问
8、题时,就可以指定编码方式来处理了。使用方法:CnZipOutputStreamzos=newCnZipOutputStream(OutputStreamos,Stringencoding);CnZipInputStreamzins=newCnZipInputStream(InputStreamins,S
此文档下载收益归作者所有