java zip

//这个解压代码效果一般,不推荐. 
package mypackage.test; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.util.zip.ZipEntry; 
import java.util.zip.ZipInputStream; 
/** */ 
/** 
* 使用java核心类库打包、解包zip文件。 
* 不足之处在于解压的 ZIP 文件中有中文文件名或有文件夹时,会解压失败 
* 在windows下解压后编码正常显示中文,而其他系统下则不能正常还原; 
*/ 
public class TestZip { 
/** */ 
/** 
* 定义解压缩zip文件的方法 
* @param zipFileName 
* @param outputDirectory 
*/ 
public void unzip(String zipFileName, String outputDirectory) { 
try { 
ZipInputStream in = new ZipInputStream(new FileInputStream( 
zipFileName)); 
//获取ZipInputStream中的ZipEntry条目,一个zip文件中可能包含多个ZipEntry, 
//当getNextEntry方法的返回值为null,则代表ZipInputStream中没有下一个ZipEntry, 
//输入流读取完成; 
ZipEntry z = in.getNextEntry(); 
while (z != null) { 
System.out.println("unziping: " + z.getName()); 
//创建以zip包文件名为目录名的根目录 
File f = new File(outputDirectory); 
f.mkdir(); 
if (z.isDirectory()) { 
String name = z.getName(); 
name = name.substring(0, name.length() - 1); 
System.out.println("name: " + name); 
f = new File(outputDirectory + File.separator + name); 
f.mkdir(); 
System.out.println("mkdir: " + outputDirectory 
+ File.separator + name); 
} else { 
f = new File(outputDirectory + File.separator + z.getName()); 
f.createNewFile(); 
FileOutputStream out = new FileOutputStream(f); 
int b; 
while ((b = in.read()) != -1) { 
out.write(b); 

out.close(); 

//读取下一个ZipEntry 
z = in.getNextEntry(); 

in.close(); 
} catch (Exception e) { 
// TODO 自动生成 catch 块 
e.printStackTrace(); 


public static void main(String[] args) throws Exception { 
TestZip t = new TestZip(); 
t.unzip("D:/temp/mod0.zip", "D:/temp/mod0"); 
//一定要注意a.zip文件要经java程序压缩出来的文件,这个程序才可以解压 




//  这个可以解决中文文件夹,中文文件名等问题,强烈推荐! 
解 压zip文件,一开始用传统的jdk中的java.util.zip包中的类,实验结果对于含有英文文件名和英文目录的zip文件没有问题,但对于含有中 文文件名和中文目录的zip文件便解压不了,这是因为中文编码的问题,jdk本身有这个bug,虽然网上也有一些解决方案,但都没有试验成功。最后发现开 源库ant.jar中的org.apache.tools.zip包里的类可以解决上述问题,附代码如下: 
package mypackage.test; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.InputStream; 
/** 
* 此例堪称完美,本人一直在用,强力推荐! 
* 这个可以很好的解决上一例中所遇到的问题,只是需要去下载一个 Ant.jar 包。 
*/ 
public class ZipFileOperUpdate { 
private void createDirectory(String directory, String subDirectory) { 
String dir[]; 
File fl = new File(directory); 
try { 
if (subDirectory == "" && fl.exists() != true) 
fl.mkdir(); 
else if (subDirectory != "") { 
dir = subDirectory.replace('\\', '/').split("/"); 
for (int i = 0; i < dir.length; i++) { 
File subFile = new File(directory + File.separator + dir); 
if (subFile.exists() == false) 
subFile.mkdir(); 
directory += File.separator + dir


} catch (Exception ex) { 
System.out.println(ex.getMessage()); 


public void unZip(String zipFileName, String outputDirectory) 
throws Exception { 
try {   
org.apache.tools.zip.ZipFile zipFile = new org.apache.tools.zip.ZipFile( 
zipFileName); 
java.util.Enumeration e = zipFile.getEntries(); 
org.apache.tools.zip.ZipEntry zipEntry = null; 
createDirectory(outputDirectory, ""); 
while (e.hasMoreElements()) { 

zipEntry = (org.apache.tools.zip.ZipEntry) e.nextElement(); 
System.out.println("unziping " + zipEntry.getName()); 

if (zipEntry.isDirectory()) { 
String name = zipEntry.getName(); 
name = name.substring(0, name.length() - 1); 
File f = new File(outputDirectory + File.separator + name); 
f.mkdir(); 
System.out.println("mkdir:" + outputDirectory 
+ File.separator + name); 
} else { 
String fileName = zipEntry.getName(); 
fileName = fileName.replace('\\', '/'); 
// System.out.println("测试文件1:" +fileName); 
if (fileName.indexOf("/") != -1) { 
createDirectory(outputDirectory, fileName.substring(0, 
fileName.lastIndexOf("/"))); 
fileName = fileName.substring( 
fileName.lastIndexOf("/") + 1, fileName 
.length()); 

File f = new File(outputDirectory + File.separator 
+ zipEntry.getName()); 
f.createNewFile(); 
InputStream in = zipFile.getInputStream(zipEntry); 
FileOutputStream out = new FileOutputStream(f); 
byte[] by = new byte[1024]; 
int c; 
while ((c = in.read(by)) != -1) { 
out.write(by, 0, c); 

out.close(); 
in.close(); 


} catch (Exception ex) { 
System.out.println(ex.getMessage()); 




trackback  :    http://www.gzas.org/kxybbs/asp/showtopic.asp?TopBh=1003810701 


//以下方法不太好,算是实现读取 zip 内文件内容的功能吧 
//文件名:myZip.java 
import java.io.*; 
import java.util.*; 
import java.util.zip.*; 
/** 
* <p>Title: 文件压缩和解压</p> 
* <p>Description: 使用ZipInputStream和ZipOutputStream对文件和目录进行压缩和解压处理</p> 
* <p>Copyright: Copyright (c) 2007</p> 
* <p>Filename: myZip.java</p> 
* @version 1.0 
*/ 
public class myZip{ 
/** 
*<br>方法说明:实现文件的压缩处理 
*<br>输入参数:String[] fs 压缩的文件数组 
*<br>返回类型: 
*/ 
public void ZipFiles(String[] fs){ 
try{ 
String fileName = fs[0]; 
FileOutputStream f = 
new FileOutputStream(fileName+".zip"); 
//使用输出流检查 
CheckedOutputStream cs = 
new CheckedOutputStream(f,new Adler32()); 
//声明输出zip流 
ZipOutputStream out = 
new ZipOutputStream(new BufferedOutputStream(cs)); 
//写一个注释 
out.setComment("A test of Java Zipping"); 
//对多文件进行压缩 
for(int i=1;i<fs.length;i++){ 
System.out.println("Write file "+fs); 
BufferedReader in = 
new BufferedReader( 
new FileReader(fs)); 
out.putNextEntry(new ZipEntry(fs)); 
int c; 
while((c=in.read())!=-1) 
out.write(c); 
in.close(); 

//关闭输出流 
out.close(); 
System.out.println("Checksum::"+cs.getChecksum().getValue()); 
}catch(Exception e){ 
System.err.println(e); 




/** 
*<br>方法说明:解压缩Zip文件 
*<br>输入参数:String fileName 解压zip文件名 
*<br>返回类型: 
*/ 
public void unZipFile(String fileName){ 
try{ 
System.out.println("读取ZIP文件........"); 
//文件输入流 
FileInputStream fi = 
new FileInputStream(fileName+".zip"); 
//输入流检查 
CheckedInputStream csi = new CheckedInputStream(fi,new Adler32()); 
//输入流压缩 
ZipInputStream in2 = 
new ZipInputStream( 
new BufferedInputStream(csi)); 
ZipEntry ze; 
System.out.println("Checksum::"+csi.getChecksum().getValue()); 
//解压全部文件 
while((ze = in2.getNextEntry())!=null){ 
System.out.println("Reading file "+ze); 
int x; 
while((x= in2.read())!=-1) 
//这里是写文件,write是以byte方式输出。 
System.out.write(x); 

in2.close(); 
}catch(Exception e){ 
System.err.println(e); 


/** 
*<br>方法说明:读取Zip文件列表 
*<br>输入参数:String fileName zip文件名 
*<br>返回类型:Vector 文件列表 
*/ 
public Vector listFile(String fileName){ 
try{ 
String[] aRst=null; 
Vector vTemp = new Vector(); 
//zip文件对象 
ZipFile zf = new ZipFile(fileName+".zip"); 
Enumeration e = zf.entries(); 
while(e.hasMoreElements()){ 
ZipEntry ze2 = (ZipEntry)e.nextElement(); 
System.out.println("File: "+ze2); 
vTemp.addElement(ze2); 

return  vTemp; 
}catch(Exception e){ 
System.err.println(e); 
return null; 


/** 
*<br>方法说明:主方法 
*<br>输入参数: 
*<br>返回类型: 
*/ 
public static void main(String[] args){ 
try{ 
String fileName = args[0]; 
myZip myZip = new myZip(); 
myZip.ZipFiles(args); 
myZip.unZipFile(fileName); 
Vector dd = myZip.listFile(fileName); 
System.out.println("File List: "+dd); 
}catch(Exception e){ 
e.printStackTrace(); 




--------------------------------------------ant.jar包---------------------------------- 
import java.io.*;   
import java.util.*; 
import java.io.File; 
import org.apache.tools.zip.*; 
public  class  CDGGzip   
{   
//boolean  packFrame  =  false;   
private File srcPath =new File("d:"+File.separator+"邢晓宁"); 
private String outFilename=new String("d:"+File.separator+"邢晓宁.zip"); 
private int len=srcPath.listFiles().length; 
private String[] filenames = new String[len]; 
public void setSrcPath(String src){ 
srcPath=new File(src); 

public File getSrcPath(){ 
return srcPath; 

public void setOutFilename(String out){ 
outFilename=out; 

public String getOutFilename(){ 
return outFilename; 
}   
public void gzip(){ 
byte[] buf = new byte[1024]; 
try { 
File[]  files  =  srcPath.listFiles(); 
for(int  i=0;i<len;i++) 

//if(!files.isDirectory()) 
filenames=srcPath.getPath()+File.separator+files.getName(); 

ZipOutputStream out = new ZipOutputStream(new FileOutputStream(outFilename)); 
for (int i=0; i<filenames.length; i++) 

FileInputStream in = new FileInputStream(filenames); 
out.putNextEntry(new org.apache.tools.zip.ZipEntry(files.getName())); 
int len; 
while ((len = in.read(buf)) > 0) 

out.write(buf, 0, len); 

out.closeEntry(); 
in.close(); 

out.close(); 

catch (IOException e) 

System.out.println(e); 



public static void main(String arg[]){ 
CDGGzip cdggzip=new CDGGzip(); 
cdggzip.gzip(); 


}
阅读更多
个人分类: JAVA
想对作者说点什么? 我来说一句

zip 压缩 文件 Java

2010年08月17日 1.2MB 下载

( java设计模式.zip

2017年10月31日 63.63MB 下载

Java捕鱼达人源码.zip

2018年02月27日 46.65MB 下载

JAVA设计模式.影印版.zip

2010年05月21日 9.07MB 下载

java多媒体资料.zip

2010年07月28日 10.37MB 下载

java俄罗斯方块

2018年05月31日 8KB 下载

java加密解密zip压缩包

2017年05月27日 23.79MB 下载

java读取zip文件

2015年07月05日 6KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭