java中关于解压java文件中中文乱码的问题!

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
Java中压缩与解压--中文文件名乱码解决办法
下载积分:1888
内容提示:Java中压缩与解压--中文文件名乱码解决办法
文档格式:TXT|
浏览次数:39|
上传日期: 16:33:00|
文档星级:
该用户还上传了这些文档
Java中压缩与解压--中文文件名乱码解决办法
官方公共微信Java中压缩与解压--中文文件名乱码解决办法
----------------------------------------------------------------------
Apache Ant有个包专门处理ZIP文件,可以指定文件名的编码方式。由此可以解决问题。
例如:用org.apache.tools.zip.
ZipOutputStream代替java.util.zip.ZipOutputStream。
------------------------------------------------------------------------
java对於文字的编码是以 unicode为基础,因此,若是以ZipInputStream及ZipOutputStream来处理压缩及解压缩的工作,碰到中文档名或路径,那当然是以unicode来处理罗!但是,现在市面上的压缩及解压缩软体,例如winzip,却是不支援unicode的,一碰到档名以unicode编码的档案,它就不处理。 那要如何才能做出让WinRar能够处理的压缩档呢?那就得从修改ZipInputStream及ZipOutputStream对於档名的编码方式来着手了。我们可以从jdk的src.zip取得ZipInputStream及ZipOutputStream的原始码来加以修改
一、ZipOutputStream.java
1.从jdk的src.zip取得ZipOutputStream.java原始码,另存到一个新文件中,档名改为CnZipOutputStream.java。
2.开始修改原始码,将class名称改为CnZipOutputStream
3.建构式也必须更改为CnZipOutputStream
4.新增member,这个member记录编码方式
private String encoding=&UTF-8&;
5.再新增一个建构式(这个建构式可以让这个class在new的时候,设定档名的编码)
public CZipOutputStream(OutputStream out,String encoding) {
this(out);
this.encoding=
}
6.找到byte[] nameBytes = getUTF8Bytes(e.name);(有二个地方),将它修改如下:
byte[] nameBytes =
if (this.encoding.toUpperCase().equals(&UTF-8&))
nameBytes =getUTF8Bytes(e.name);
nameBytes= e.name.getBytes(this.encoding);
catch(Exception byteE)
nameBytes=getUTF8Bytes(e.name);
二、ZipInputStream.java
1.从jdk的src.zip取得ZipInputStream.java原始码,另存到一个新文件中,档名改为CnZipInputStream.java。
2.开始修改原始码,将class名称改为CnZipInputStream
3.建构式也必须更改为CnZipInputStream
4.新增member,这个member记录编码方式
private String encoding=&UTF-8&;
5.再新增一个建构式如下(这个建构式可以让这个class在new的时候,设定档名的编码)
public CZipInputStream(InputStream in,String encoding) {
this(in);
this.encoding=
}
6.找到ZipEntry e = createZipEntry(getUTF8String(b, 0, len));这一行,将它改成如下:
ZipEntry e=
if (this.encoding.toUpperCase().equals(&UTF-8&))
e=createZipEntry(getUTF8String(b, 0, len));
e=createZipEntry(new String(b,0,len,this.encoding));
catch(Exception byteE)
e=createZipEntry(getUTF8String(b, 0, len));
以上两个档案储存後compile产生CZipOutputStream.class及CZipInputStream.class,使用winzip开启 [java_home]\jre\lib\rt.jar这个档案,将CnZipOutputStream.class及 CnZipInputStream.class加进去,以後当压缩及解压缩时有中文档名及路径的问题时,就可以指定编码方式来处理了。
使用方法:
CnZipOutputStream zos=new CnZipOutputStream(OutputStream os,String encoding);
CnZipInputStream zins=new CnZipInputStream(InputStream ins,String encoding);
对于前面文章中文件打包下载中遇到的中文文件问题,解决手法是:
OutputStream os = response.getOutputStream();
CnZipOutputStream zos = new CnZipOutputStream(os,&gbk&); //加上中文编码类型
Properties properties=System.getProperties();
Iterator it=properties.keySet().iterator();
while (it.hasNext())
String key=it.next().toString();
String value=properties.getProperty(key);
System.out.println(key+&==&+value);
print======================
java.runtime.name==Java(TM) SE Runtime Environment
sun.boot.library.path==E:\Java\jdk1.6.0_16\jre\bin
java.vm.version==14.2-b01
java.vm.vendor==Sun Microsystems Inc.
java.vendor.url==/
path.separator==;
java.vm.name==Java HotSpot(TM) Client VM
file.encoding.pkg==sun.io
sun.java.launcher==SUN_STANDARD
user.country==CN
sun.os.patch.level==
java.vm.specification.name==Java Virtual Machine Specification
user.dir==E:\workspace\QuetzacoEIM
java.runtime.version==1.6.0_16-b01
java.awt.graphicsenv==sun.awt.Win32GraphicsEnvironment
java.endorsed.dirs==E:\Java\jdk1.6.0_16\jre\lib\endorsed
os.arch==x86
java.io.tmpdir==C:\Users\dong\AppData\Local\Temp\
line.separator==
java.vm.specification.vendor==Sun Microsystems Inc.
user.variant==
os.name==Windows 7
sun.jnu.encoding==GBK
java.library.path==E:\Java\jdk1.6.0_16\.;C:\Windows\Sun\Java\C:\Windows\system32;C:\WC:\Program Files\Common Files\Microsoft Shared\Windows LC:\Windows\system32;C:\WC:\Windows\System32\WC:\Windows\System32\WindowsPowerShell\v1.0\;E:\Java\jdk1.6.0_16\;E:\Java\jdk1.6.0_16\bin\;E:\apache-ant-1.7.1\bin\;C:\Program Files\Windows Live\Shared
java.specification.name==Java Platform API Specification
java.class.version==50.0
piler==HotSpot Client Compiler
os.version==6.1
user.home==d:\Users\dong
user.timezone==
java.awt.printerjob==sun.awt.windows.WPrinterJob
file.encoding==UTF-8
java.specification.version==1.6
java.class.path==E:\workspace\QuetzacoEIM\E:\workspace\QuetzacoEIM\lib\activation.E:\workspace\QuetzacoEIM\lib\ant.E:\workspace\QuetzacoEIM\lib\avalon-framework-4.1.3.E:\workspace\QuetzacoEIM\lib\axis.E:\workspace\QuetzacoEIM\lib\batik-all-1.6.E:\workspace\QuetzacoEIM\lib\bcmail-jdk14-132.E:\workspace\QuetzacoEIM\lib\bcprov-jdk14-132.E:\workspace\QuetzacoEIM\lib\bjvip_quickaction.E:\workspace\QuetzacoEIM\lib\c3p0.E:\workspace\QuetzacoEIM\lib\cglib2.E:\workspace\QuetzacoEIM\lib\checkstyle-all-4.2.E:\workspace\QuetzacoEIM\lib\commons-beanutils.E:\workspace\QuetzacoEIM\lib\commons-cli-1.1.E:\workspace\QuetzacoEIM\lib\commons-collections-3.1.E:\workspace\QuetzacoEIM\lib\commons-collections.E:\workspace\QuetzacoEIM\lib\commons-digester.E:\workspace\QuetzacoEIM\lib\commons-discovery.E:\workspace\QuetzacoEIM\lib\commons-fileupload-1.2.1.E:\workspace\QuetzacoEIM\lib\commons-io-1.4.E:\workspace\QuetzacoEIM\lib\commons-lang.E:\workspace\QuetzacoEIM\lib\log4j.E:\workspace\QuetzacoEIM\lib\commons-logging-api.E:\workspace\QuetzacoEIM\lib\commons-logging.E:\workspace\QuetzacoEIM\lib\cos.E:\workspace\QuetzacoEIM\lib\crimson.E:\workspace\QuetzacoEIM\lib\dom4j-1.5.1.E:\workspace\QuetzacoEIM\lib\dom4j.E:\workspace\QuetzacoEIM\lib\ehcache.E:\workspace\QuetzacoEIM\lib\FontBox-0.1.0-dev.E:\workspace\QuetzacoEIM\lib\jai_codec.E:\workspace\QuetzacoEIM\lib\jai_core.E:\workspace\QuetzacoEIM\lib\xmlgraphics-commons-1.2.E:\workspace\QuetzacoEIM\lib\fop.E:\workspace\QuetzacoEIM\lib\hibernate-2.1.1.E:\workspace\QuetzacoEIM\lib\hibernate-tools.E:\workspace\QuetzacoEIM\lib\htmlparser.E:\workspace\QuetzacoEIM\lib\IKAnalyzer1.4.E:\workspace\QuetzacoEIM\lib\itext-2.1.0.E:\workspace\QuetzacoEIM\lib\iTextAsian.E:\workspace\QuetzacoEIM\lib\jakarta-regexp-1.4.E:\workspace\QuetzacoEIM\lib\james.E:\workspace\QuetzacoEIM\lib\jasperreports-3.5.2.E:\workspace\QuetzacoEIM\lib\jaudiotagger-2.0.1.E:\workspace\QuetzacoEIM\lib\javaee.E:\workspace\QuetzacoEIM\lib\jaxen-core.E:\workspace\QuetzacoEIM\lib\jaxen-jdom.E:\workspace\QuetzacoEIM\lib\jaxrpc.E:\workspace\QuetzacoEIM\lib\jbpm.core.E:\workspace\QuetzacoEIM\lib\jcommon-0.8.0.E:\workspace\QuetzacoEIM\lib\jcrontab.E:\workspace\QuetzacoEIM\lib\jdom-contrib.E:\workspace\QuetzacoEIM\lib\jdom.E:\workspace\QuetzacoEIM\lib\jfreechart-0.9.8.E:\workspace\QuetzacoEIM\lib\juh-3.1.0.E:\workspace\QuetzacoEIM\lib\jurt-3.1.0.E:\workspace\QuetzacoEIM\lib\ridl-3.1.0.E:\workspace\QuetzacoEIM\lib\unoil-3.1.0.E:\workspace\QuetzacoEIM\lib\json-.E:\workspace\QuetzacoEIM\lib\jodconverter-core-3.0-beta-3.E:\workspace\QuetzacoEIM\lib\jpim-0.1.E:\workspace\QuetzacoEIM\lib\jta.E:\workspace\QuetzacoEIM\lib\jxl.E:\workspace\QuetzacoEIM\lib\kehan.E:\workspace\QuetzacoEIM\lib\lucene-analyzers-2.2.0.E:\workspace\QuetzacoEIM\lib\lucene-core-2.2.0.E:\workspace\QuetzacoEIM\lib\lucene-demos-2.2.0.E:\workspace\QuetzacoEIM\lib\lucene-highlighter-2.2.0.E:\workspace\QuetzacoEIM\lib\mail.E:\workspace\QuetzacoEIM\lib\metadata-extractor-2.3.1.E:\workspace\QuetzacoEIM\lib\mlibwrapper_jai.E:\workspace\QuetzacoEIM\lib\Multivalent.E:\workspace\QuetzacoEIM\lib\odmg.E:\workspace\QuetzacoEIM\lib\PDFBox-0.7.3.E:\workspace\QuetzacoEIM\lib\poi-3.6-.E:\workspace\QuetzacoEIM\lib\poi-contrib-3.6-.E:\workspace\QuetzacoEIM\lib\poi-ooxml-3.6-.E:\workspace\QuetzacoEIM\lib\poi-ooxml-schemas-3.6-.E:\workspace\QuetzacoEIM\lib\poi-scratchpad-3.6-.E:\workspace\QuetzacoEIM\lib\postgresql.E:\workspace\QuetzacoEIM\lib\quetzacofileserver.E:\workspace\QuetzacoEIM\lib\saaj.E:\workspace\QuetzacoEIM\lib\sax2.E:\workspace\QuetzacoEIM\lib\saxpath.E:\workspace\QuetzacoEIM\lib\scheduler-plugin.E:\workspace\QuetzacoEIM\lib\sequoia-driver.E:\workspace\QuetzacoEIM\lib\servlet-api.E:\workspace\QuetzacoEIM\lib\slf4j-api-1.4.0.E:\workspace\QuetzacoEIM\lib\slf4j-jdk14-1.4.0.E:\workspace\QuetzacoEIM\lib\SMSendAPI.E:\workspace\QuetzacoEIM\lib\soalet.E:\workspace\QuetzacoEIM\lib\struts-1.1.E:\workspace\QuetzacoEIM\lib\Tidy.E:\workspace\QuetzacoEIM\lib\vcard4j.E:\workspace\QuetzacoEIM\lib\velocity.E:\workspace\QuetzacoEIM\lib\wsdl4j.E:\workspace\QuetzacoEIM\lib\xercesImpl.E:\workspace\QuetzacoEIM\lib\xml-apis.E:\workspace\QuetzacoEIM\lib\xalan.E:\workspace\QuetzacoEIM\lib\xerces.E:\workspace\QuetzacoEIM\lib\xmlbeans-2.3.0.E:\workspace\QuetzacoEIM\lib\xmlParserAPIs.E:\workspace\QuetzacoEIM\lib\xpp3_min-1.1.3.4.I.E:\workspace\QuetzacoEIM\lib\xstream-1.2.2.E:\workspace\QuetzacoEIM\lib\Yozo_RMI.E:\workspace\QuetzacoEIM\src\james\lib\activation.E:\workspace\QuetzacoEIM\src\james\lib\avalon-framework-4.1.3.E:\workspace\QuetzacoEIM\src\james\lib\commons-collections.E:\workspace\QuetzacoEIM\src\james\lib\commons-dbcp-1.1.E:\workspace\QuetzacoEIM\src\james\lib\commons-net-1.0.0-dev.E:\workspace\QuetzacoEIM\src\james\lib\commons-pool-1.1.E:\workspace\QuetzacoEIM\src\james\lib\cornerstone.E:\workspace\QuetzacoEIM\src\james\lib\dnsjava-1.4.3.E:\workspace\QuetzacoEIM\src\james\lib\excalibur-baxter-1.0a.E:\workspace\QuetzacoEIM\src\james\lib\excalibur-cli-1.0.E:\workspace\QuetzacoEIM\src\james\lib\excalibur-collections-1.0.E:\workspace\QuetzacoEIM\src\james\lib\excalibur-concurrent-1.0.E:\workspace\QuetzacoEIM\src\james\lib\excalibur-configuration-1.0.E:\workspace\QuetzacoEIM\src\james\lib\excalibur-containerkit-1.0.E:\workspace\QuetzacoEIM\src\james\lib\excalibur-datasource-1.0.E:\workspace\QuetzacoEIM\src\james\lib\excalibur-extension-1.0a.E:\workspace\QuetzacoEIM\src\james\lib\excalibur-i18n-1.0.E:\workspace\QuetzacoEIM\src\james\lib\excalibur-instrument-0.1.E:\workspace\QuetzacoEIM\src\james\lib\excalibur-io-1.1.E:\workspace\QuetzacoEIM\src\james\lib\excalibur-logger-1.0.E:\workspace\QuetzacoEIM\src\james\lib\excalibur-pool-1.0.E:\workspace\QuetzacoEIM\src\james\lib\excalibur-thread-1.0.E:\workspace\QuetzacoEIM\src\james\lib\excalibur-threadcontext-1.0.E:\workspace\QuetzacoEIM\src\james\lib\excalibur-util-1.0.E:\workspace\QuetzacoEIM\src\james\lib\isorelax.E:\workspace\QuetzacoEIM\src\james\lib\j2ee.E:\workspace\QuetzacoEIM\src\james\lib\jakarta-oro-2.0.1.E:\workspace\QuetzacoEIM\src\james\lib\jboss-client.E:\workspace\QuetzacoEIM\src\james\lib\jboss-common-client.E:\workspace\QuetzacoEIM\src\james\lib\jbossall-client.E:\workspace\QuetzacoEIM\src\james\lib\jdbc2_0-stdext.E:\workspace\QuetzacoEIM\src\james\lib\jing.E:\workspace\QuetzacoEIM\src\james\lib\jnp-client.E:\workspace\QuetzacoEIM\src\james\lib\junit-3.7.E:\workspace\QuetzacoEIM\src\james\lib\log4j.E:\workspace\QuetzacoEIM\src\james\lib\logkit.E:\workspace\QuetzacoEIM\src\james\lib\mail-1.3.1.E:\workspace\QuetzacoEIM\src\james\lib\PDFBox-0.6.6.E:\workspace\QuetzacoEIM\src\james\lib\phoenix-bsh-commands.E:\workspace\QuetzacoEIM\src\james\lib\phoenix-client.E:\workspace\QuetzacoEIM\src\james\lib\servlet.E:\workspace\QuetzacoEIM\src\james\lib\xml-apis.E:\workspace\QuetzacoEIM\src\james\lib\xalan-2.3.1.E:\workspace\QuetzacoEIM\src\james\lib\xercesimpl-2.0.2.E:\workspace\QuetzacoEIM\lib\QuetzacoQueueManagement-1.0.E:\workspace\QuetzacoEIM\lib\javacsv.jar
user.name==dong
java.vm.specification.version==1.0
java.home==E:\Java\jdk1.6.0_16\jre
sun.arch.data.model==32
user.language==zh
java.specification.vendor==Sun Microsystems Inc.
awt.toolkit==sun.awt.windows.WToolkit
==mixed mode, sharing
java.version==1.6.0_16
java.ext.dirs==E:\Java\jdk1.6.0_16\jre\lib\C:\Windows\Sun\Java\lib\ext
sun.boot.class.path==E:\Java\jdk1.6.0_16\jre\lib\resources.E:\Java\jdk1.6.0_16\jre\lib\rt.E:\Java\jdk1.6.0_16\jre\lib\sunrsasign.E:\Java\jdk1.6.0_16\jre\lib\jsse.E:\Java\jdk1.6.0_16\jre\lib\jce.E:\Java\jdk1.6.0_16\jre\lib\charsets.E:\Java\jdk1.6.0_16\jre\classes
java.vendor==Sun Microsystems Inc.
file.separator==\
java.vendor.url.bug==/cgi-bin/bugreport.cgi
sun.io.unicode.encoding==UnicodeLittle
sun.cpu.endian==little
sun.desktop==windows
sun.cpu.isalist==pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86
Java中压缩与解压--中文文件名乱码解决办法―汇集和整理大量word文档,专业文献,应用文书,考试资料,教学教材,办公文档,教程攻略,文档搜索下载下载,拥有海量中文文档库,关注高价值的实用信息,我们一直在努力,争取提供更多下载资源。70Java中压缩与解压--中文文件名乱码解决办法
上亿文档资料,等你来发现
70Java中压缩与解压--中文文件名乱码解决办法
Java中压缩与解压--中文文件名乱码解决办法;------------------------;ApacheAnt有个包专门处理ZIP文件,可以;例如:用org.apache.tools.zip;------------------------;java对於文字的编码是以unicode为基础,;一、ZipOutputStream.java;1.从jdk的s
Java中压缩与解压--中文文件名乱码解决办法----------------------------------------------------------------------Apache Ant有个包专门处理ZIP文件,可以指定文件名的编码方式。由此可以解决问题。例如:用org.apache.tools.zip.ZipOutputStream代替java.util.zip.ZipOutputStream。------------------------------------------------------------------------java对於文字的编码是以 unicode为基础,因此,若是以ZipInputStream及ZipOutputStream来处理压缩及解压缩的工作,碰到中文档名或路径,那当然是以unicode来处理罗!但是,现在市面上的压缩及解压缩软体,例如winzip,却是不支援unicode的,一碰到档名以unicode编码的档案,它就不处理。 那要如何才能做出让WinRar能够处理的压缩档呢?那就得从修改ZipInputStream及ZipOutputStream对於档名的编码方式来着手了。我们可以从jdk的src.zip取得ZipInputStream及ZipOutputStream的原始码来加以修改一、ZipOutputStream.java1.从jdk的src.zip取得ZipOutputStream.java原始码,另存到一个新文件中,档名改为CnZipOutputStream.java。2.开始修改原始码,将class名称改为CnZipOutputStream3.建构式也必须更改为CnZipOutputStream4.新增member,这个member记录编码方式private String encoding=&UTF-8&;5.再新增一个建构式(这个建构式可以让这个class在new的时候,设定档名的编码)public CZipOutputStream(OutputStream out,String encoding) {this(out);this.encoding=}6.找到byte[] nameBytes = getUTF8Bytes(e.name);(有二个地方),将它修改如下:byte[] nameBytes = try { if (this.encoding.toUpperCase().equals(&UTF-8&)) nameBytes =getUTF8Bytes(e.name); else nameBytes= e.name.getBytes(this.encoding); } catch(Exception byteE) { nameBytes=getUTF8Bytes(e.name); } 二、ZipInputStream.java1.从jdk的src.zip取得ZipInputStream.java原始码,另存到一个新文件中,档名改为CnZipInputStream.java。2.开始修改原始码,将class名称改为CnZipInputStream3.建构式也必须更改为CnZipInputStream4.新增member,这个member记录编码方式private String encoding=&UTF-8&;5.再新增一个建构式如下(这个建构式可以让这个class在new的时候,设定档名的编码)public CZipInputStream(InputStream in,String encoding) {this(in);this.encoding=}6.找到ZipEntry e = createZipEntry(getUTF8String(b, 0, len));这一行,将它改成如下:ZipEntry e= try { if (this.encoding.toUpperCase().equals(&UTF-8&)) e=createZipEntry(getUTF8String(b, 0, len)); else e=createZipEntry(new String(b,0,len,this.encoding)); } catch(Exception byteE) { e=createZipEntry(getUTF8String(b, 0, len)); } 以上两个档案储存後compile产生CZipOutputStream.class及CZipInputStream.class,使用winzip开启 [java_home]\jre\lib\rt.jar这个档案,将CnZipOutputStream.class及 CnZipInputStream.class加进去,以後当压缩及解压缩时有中文档名及路径的问题时,就可以指定编码方式来处理了。使用方法:CnZipOutputStream zos=new CnZipOutputStream(OutputStream os,String encoding);CnZipInputStream zins=new CnZipInputStream(InputStream ins,String encoding);对于前面文章中文件打包下载中遇到的中文文件问题,解决手法是:OutputStream os = response.getOutputStream();CnZipOutputStream zos = new CnZipOutputStream(os,&gbk&); //加上中文编码类型 包含各类专业文献、应用写作文书、幼儿教育、小学教育、外语学习资料、生活休闲娱乐、专业论文、文学作品欣赏、70Java中压缩与解压--中文文件名乱码解决办法等内容。
 用java.util.zip解压WinZip、WinRar打包 的压缩文件时,中文也是乱码,主要原因是因为java.util.zip使用编码和WinZip和 WinRar使用的不同,此处提供一种解决办法:修改...  ubuntu linux 压缩文件 zip 中文乱码问题 在 windows 上压缩的文件,是以系统...采用了上面的第一个方法,问题解决。 另一方法为采用 java 的 jar 命令解压 ...  下,是可以双击打开 RAR 压缩包里的文件 的,一般遇到文件是乱码的情况可能是压缩文件本身的问题,也可能 是我们解压不当造成的问题,下面为大家介绍以下相关解决办法...  Java ZIP文件压缩与解压缩_计算机软件及应用_IT/计算机_专业资料。Java ZIP文件...编码, 其它编码方式可能造成文件名与文件夹名 使用中文的情况下压缩后为乱码。...  java解压.zip或.jar文件 2页 1下载券 利用java实现zip的压缩和... 3页 1下载...所以乱码 问题是没办法处理的,看有些人说可以改 src.zip 里面的类 Zip...  java 读取 properties 文件中文乱码的解决方法 收藏 java 读取 properties 文件时,如果包含中文,那么该中文字段读出为乱码。这是因为 java 中 文件大多以 UTF-8 ...  JAVA 所有中文乱码解决方法_电脑基础知识_IT/计算机_...java读写文件避免中文乱... 2页 免费 解析Java中文...Java中压缩与解压--中文... 5页 免费喜欢...  文件下载 response.setHeader()下载中文文件名乱码问题 解决办法_互联网_IT/计算机...中文乱码解决方法 35页 免费 Java中压缩与解压--中文... 5页 免费 Serv-U...Java 中 解压缩文件 ZIP - java小强 - ITeye技术网站
博客分类:
传入一组文件,将文件列表打包为ZIP文件,传入ZIP文件将文件解压缩到一个指定文件夹,下面是这个实例的实现
使用到了ANT的工具类,所以要引入ant.jar文件到工程中
对于压缩建立一个工具类:
import java.io.F
import java.io.FileInputS
import java.io.FileOutputS
import java.io.OutputS
import java.util.zip.ZipOutputS
import org.apache.tools.zip.ZipE
* ZIP操作工具类
* @说明 注意引入ant.jar文件
* @author cuisuqiang
* @version 1.0
public class Zip {
* 压缩文件列表到某ZIP文件
* @param zipFilename 要压缩到的ZIP文件
* @param paths 文件列表,多参数
* @throws Exception
public static void compress(String zipFilename, String... paths)
throws Exception {
compress(new FileOutputStream(zipFilename), paths);
* 压缩文件列表到输出流
* @param os 要压缩到的流
* @param paths 文件列表,多参数
* @throws Exception
public static void compress(OutputStream os, String... paths)
throws Exception {
ZipOutputStream zos = new ZipOutputStream(os);
for (String path : paths) {
if (path.equals(""))
java.io.File file = new java.io.File(path);
if (file.exists()) {
if (file.isDirectory()) {
zipDirectory(zos, file.getPath(), file.getName()
+ File.separator);
zipFile(zos, file.getPath(), "");
zos.close();
private static void zipDirectory(ZipOutputStream zos, String dirName,
String basePath) throws Exception {
File dir = new File(dirName);
if (dir.exists()) {
File files[] = dir.listFiles();
if (files.length & 0) {
for (File file : files) {
if (file.isDirectory()) {
zipDirectory(zos, file.getPath(), basePath
+ file.getName().substring(
file.getName().lastIndexOf(
File.separator) + 1)
+ File.separator);
zipFile(zos, file.getPath(), basePath);
ZipEntry ze = new ZipEntry(basePath);
zos.putNextEntry(ze);
private static void zipFile(ZipOutputStream zos, String filename,
String basePath) throws Exception {
File file = new File(filename);
if (file.exists()) {
FileInputStream fis = new FileInputStream(filename);
ZipEntry ze = new ZipEntry(basePath + file.getName());
zos.putNextEntry(ze);
byte[] buffer = new byte[8192];
int count = 0;
while ((count = fis.read(buffer)) & 0) {
zos.write(buffer, 0, count);
fis.close();
String... paths 是传入的文件列表,输出流可以穿文件流也可以传文件路径名称
压缩一组文件:
package com.xidian.
import java.io.FileOutputS
import mmon.Z
* 压缩文件
* @author cuisuqiang
* @version 1.0
public class TestCompress {
public static void main(String[] args) {
// 要压缩的文件列表
String path01 = "C:\\a";
String path02 = "C:\\test.txt";
FileOutputStream os = new FileOutputStream("C:\\a.zip"); // 输出的ZIP文件流
press(os, path01, path02);
} catch (Exception e) {
e.printStackTrace();
由于已经写了工具类,调用看起来非常清晰
解压这个压缩包:
package com.xidian.
import java.io.F
import java.io.FileInputS
import java.io.FileOutputS
import java.util.ArrayL
import java.util.zip.ZipE
import java.util.zip.ZipInputS
* 解压缩测试
* @author cuisuqiang
* @version 1.0
public class EctractZip {
@SuppressWarnings( { "unchecked", "static-access" })
public static void main(String[] args) {
EctractZip z = new EctractZip();
ArrayList&String& a = z.Ectract("C:\\a.zip", "C:\\tmp\\"); // 返回解压缩出来的文件列表
for(String s : a){
System.out.println(s);
* @param sZipPathFile 要解压的文件
* @param sDestPath 解压到某文件夹
@SuppressWarnings("unchecked")
public static ArrayList Ectract(String sZipPathFile, String sDestPath) {
ArrayList&String& allFileName = new ArrayList&String&();
// 先指定压缩档的位置和档名,建立FileInputStream对象
FileInputStream fins = new FileInputStream(sZipPathFile);
// 将fins传入ZipInputStream中
ZipInputStream zins = new ZipInputStream(fins);
ZipEntry ze =
byte[] ch = new byte[256];
while ((ze = zins.getNextEntry()) != null) {
File zfile = new File(sDestPath + ze.getName());
File fpath = new File(zfile.getParentFile().getPath());
if (ze.isDirectory()) {
if (!zfile.exists())
zfile.mkdirs();
zins.closeEntry();
if (!fpath.exists())
fpath.mkdirs();
FileOutputStream fouts = new FileOutputStream(zfile);
allFileName.add(zfile.getAbsolutePath());
while ((i = zins.read(ch)) != -1)
fouts.write(ch, 0, i);
zins.closeEntry();
fouts.close();
fins.close();
zins.close();
} catch (Exception e) {
System.err.println("Extract error:" + e.getMessage());
return allFileN
请您到ITEYE网站看原创,谢谢!
自建博客地址: ,内容与ITEYE同步!
解压其实非常简单,因为JDK 中有一个ZipInputStream对象,只需要使用他为我们服务即可!
下载次数: 67
cuisuqiang
浏览: 1043857 次
来自: 北京
浏览量:886651
不错,简单易懂,试验成功
springdata jpa相关demo源代码下载,地址:ht ...
博主,我按照你得方法能够连上也能获取到当前路径。但是上传文件的 ...
spring mvc demo教程源代码下载:http://w ...

我要回帖

更多关于 java文件中中文乱码 的文章

 

随机推荐