|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Java的桌面程序开发在java程序员里通常叫swing开发,主要用的swing包里的类开发的,也就是通常说的c/s架构开发紧缩可随便转载,但请说明出处及作者
SonyMusic
2003.05.28
==========================================================================
在Java中操纵Zip文件,紧缩/解压
packagetest.nothing;
importjava.io.*;
importjava.util.*;
importjava.util.zip.*;
importcom.beaconsystem.util.*;
importjunit.framework.TestCase;
/**
*@authorSonyMusic
*
*用于测试java.util.zip包紧缩息争紧缩文件zip文件的例子.
*基于JUnit编写,包含两个test办法,和三个帮助办法.
*注重到利用过程当中操纵的满是流,以是不单单能够读写文件。这只是一个复杂的例子.
*/
publicclassTestZipOpextendsTestCase{
/**
*ConstructorforTestZipOp.
*@paramarg0
*/
publicTestZipOp(Stringarg0){
super(arg0);
}
publicstaticvoidmain(String[]args){
junit.textui.TestRunner.run(TestZipOp.class);
}
/**
*zip紧缩功效测试.
*将d: empzipout目次下的一切文件连同子目次紧缩到d: empout.zip.
*@throwsException
*/
publicvoidtestCreateZip()throwsException{
//紧缩baseDir下一切文件,包含子目次
StringbaseDir="d: empzipout";
ListfileList=getSubFiles(newFile(baseDir));
//紧缩文件名
ZipOutputStreamzos=newZipOutputStream(newFileOutputStream("d: empout.zip"));
ZipEntryze=null;
byte[]buf=newbyte[1024];
intreadLen=0;
for(inti=0;i<fileList.size();i++){
Filef=(File)fileList.get(i);
System.out.print("Adding:"+f.getPath()+f.getName());
//创立一个ZipEntry,并设置Name和别的的一些属性
ze=newZipEntry(getAbsFileName(baseDir,f));
ze.setSize(f.length());
ze.setTime(f.lastModified());
//将ZipEntry加到zos中,再写进实践的文件内容
zos.putNextEntry(ze);
InputStreamis=newBufferedInputStream(newFileInputStream(f));
while((readLen=is.read(buf,0,1024))!=-1){
zos.write(buf,0,readLen);
}
is.close();
System.out.println("done...");
}
zos.close();
}
/**
*测试解紧缩功效.
*将d:download est.zip文件解压到d: empzipout目次下.
*@throwsException
*/
publicvoidtestReadZip()throwsException{
//InputStreamis=newBufferedInputStream(newFileInputStream());
StringbaseDir="d: empzipout";
ZipFilezfile=newZipFile("d:downloadTest.zip");
System.out.println(zfile.getName());
EnumerationzList=zfile.entries();
ZipEntryze=null;
byte[]buf=newbyte[1024];
while(zList.hasMoreElements()){
//从ZipFile中失掉一个ZipEntry
ze=(ZipEntry)zList.nextElement();
if(ze.isDirectory()){
System.out.println("Dir:"+ze.getName()+"skipped..");
continue;
}
System.out.println("Extracting:"+ze.getName()+" "+ze.getSize()+" "+ze.getCompressedSize());
//以ZipEntry为参数失掉一个InputStream,并写到OutputStream中
OutputStreamos=newBufferedOutputStream(newFileOutputStream(getRealFileName(baseDir,ze.getName())));
InputStreamis=newBufferedInputStream(zfile.getInputStream(ze));
intreadLen=0;
while((readLen=is.read(buf,0,1024))!=-1){
os.write(buf,0,readLen);
}
is.close();
os.close();
System.out.println("Extracted:"+ze.getName());
}
zfile.close();
}
/**
*给定根目次,前往一个绝对路径所对应的实践文件名.
*@parambaseDir指定根目次
*@paramabsFileName绝对路径名,来自于ZipEntry中的name
*@returnjava.io.File实践的文件
*/
privateFilegetRealFileName(StringbaseDir,StringabsFileName){
String[]dirs=Regex.split("/",absFileName);
//System.out.println(dirs.length);
Fileret=newFile(baseDir);
if(dirs.length>1){
for(inti=0;i<dirs.length-1;i++){
ret=newFile(ret,dirs[i]);
}
}
if(!ret.exists()){
ret.mkdirs();
}
ret=newFile(ret,dirs[dirs.length-1]);
returnret;
}
/**
*给定根目次,前往另外一个文件名的绝对路径,用于zip文件中的路径.
*@parambaseDirjava.lang.String根目次
*@paramrealFileNamejava.io.File实践的文件名
*@return绝对文件名
*/
privateStringgetAbsFileName(StringbaseDir,FilerealFileName){
Filereal=realFileName;
Filebase=newFile(baseDir);
Stringret=real.getName();
while(true){
real=real.getParentFile();
if(real==null)break;
if(real.equals(base))break;
else{
ret=real.getName()+"/"+ret;
}
}
returnret;
}
/**
*获得指定目次下的一切文件列表,包含子目次.
*@parambaseDirFile指定的目次
*@return包括java.io.File的List
*/
privateListgetSubFiles(FilebaseDir){
Listret=newArrayList();
//Filebase=newFile(baseDir);
File[]tmp=baseDir.listFiles();
for(inti=0;i<tmp.length;i++){
if(tmp[i].isFile()){
ret.add(tmp[i]);
}
if(tmp[i].isDirectory()){
ret.addAll(getSubFiles(tmp[i]));
}
}
returnret;
}
}
如果你学习的是市场营销,是销售,也许参加大课堂的学习会更合适,因为你的工作能力中有个基础就是搭建自己的人脉, |
|