仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1086|回复: 20
打印 上一主题 下一主题

[学习教程] JAVA编程:在Java中操纵Zip文件,紧缩/解压

[复制链接]
深爱那片海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:44:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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;
}

}



如果你学习的是市场营销,是销售,也许参加大课堂的学习会更合适,因为你的工作能力中有个基础就是搭建自己的人脉,
小女巫 该用户已被删除
沙发
发表于 2015-1-21 13:23:53 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
金色的骷髅 该用户已被删除
板凳
发表于 2015-1-22 14:06:07 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
分手快乐 该用户已被删除
地板
发表于 2015-1-25 08:59:01 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
小魔女 该用户已被删除
5#
发表于 2015-1-29 07:15:17 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
爱飞 该用户已被删除
6#
发表于 2015-2-5 23:54:19 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
简单生活 该用户已被删除
7#
发表于 2015-2-6 02:08:43 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
变相怪杰 该用户已被删除
8#
发表于 2015-2-8 20:56:25 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
再现理想 该用户已被删除
9#
发表于 2015-2-26 10:37:33 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
海妖 该用户已被删除
10#
发表于 2015-2-28 10:29:39 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
第二个灵魂 该用户已被删除
11#
发表于 2015-3-1 20:13:19 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
莫相离 该用户已被删除
12#
发表于 2015-3-5 23:04:35 | 只看该作者
是一种为 Internet发展的计算机语言
只想知道 该用户已被删除
13#
发表于 2015-3-7 07:48:44 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
乐观 该用户已被删除
14#
发表于 2015-3-7 18:33:17 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
深爱那片海 该用户已被删除
15#
 楼主| 发表于 2015-3-11 18:34:55 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
老尸 该用户已被删除
16#
发表于 2015-3-19 07:16:26 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
若天明 该用户已被删除
17#
发表于 2015-3-22 22:27:07 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
柔情似水 该用户已被删除
18#
发表于 2015-3-23 19:10:32 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
飘灵儿 该用户已被删除
19#
发表于 2015-4-7 20:13:04 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
因胸联盟 该用户已被删除
20#
发表于 2015-4-16 21:13:10 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 07:58

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表