写了一个用java.util.zip创建和读取zip文件的类
跟大家分享一下
里面用了递归调用
呵呵
近期用了不少递归调用!有空总结一下!
/**
testzip.java
coding by serol luo.
rollingpig@163.com
2003/07/03
http://www.chinaunix.net/forum/viewforum.php?f=26
转载请保留此信息
*/
import java.util.*;
import java.util.zip.*;
import java.io.*;
class testzip
{
public void zip(string zipfilename,string inputfile)throws exception{
zip(zipfilename,new file(inputfile));
}
public void zip(string zipfilename,file inputfile)throws exception{
zipoutputstream out=new zipoutputstream(new fileoutputstream(zipfilename));
zip(out,inputfile,"");
system.out.println("zip done");
out.close();
}
public void unzip(string zipfilename,string outputdirectory)throws exception{
zipinputstream in=new zipinputstream(new fileinputstream(zipfilename));
zipentry z;
while ((z=in.getnextentry() )!= null)
{
system.out.println("unziping "+z.getname());
if (z.isdirectory())
{
string name=z.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{
file 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();
}
}
in.close();
}
public void zip(zipoutputstream out,file f,string base)throws exception{
system.out.println("zipping "+f.getname());
if (f.isdirectory())
{
file[] fl=f.listfiles();
out.putnextentry(new zipentry(base+"/"));
base=base.length()==0?"":base+"/";
for (int i=0;i<fl.length ;i++ )
{
zip(out,fl[i],base+fl[i].getname());
}
}
else
{
out.putnextentry(new zipentry(base));
fileinputstream in=new fileinputstream(f);
int b;
while ((b=in.read()) != -1)
out.write(b);
in.close();
}
}
public static void main(string[] args)
{
try{
testzip t=new testzip();
t.zip("c://test.zip","c://test");
t.unzip("c://test.zip","c://test2");
}
catch(exception e){e.printstacktrace(system.out);}
}
}
闽公网安备 35060202000074号