文件压缩与解压缩实践-JAVA毕业设计_第1页
文件压缩与解压缩实践-JAVA毕业设计_第2页
文件压缩与解压缩实践-JAVA毕业设计_第3页
文件压缩与解压缩实践-JAVA毕业设计_第4页
文件压缩与解压缩实践-JAVA毕业设计_第5页
免费预览已结束,剩余21页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学位论文文件压缩与解压缩实践论文作者姓名: 申请学位专业:计算机科学与技术申请学位类别: 指导教师姓名(职称): 论文提交日期: 文件压缩与解压缩实践摘 要随着人们对数据的 大量需求以及计算机使用时间的 增加,计算机磁盘上的 文件越来越大,越来越多.如何让有限的 磁盘空间容纳更多的 数据成为需要解决的 问题.一方面,高速发展的 存储技术以提高磁盘容量来解决这样的 需求,但随着网络环境下数据传递的 产生以及带宽的 限制,大容量数据问题日益突出.在这两种需求的 推动下,对数据压缩的 需求产生了 .人们可以将文件在不改变其本身的 条件下,将其以更小 的 占用空间存储,并且在需要的 时候将文件恢复成原

2、有的 样子,这就是压缩目的 .本论文主要研究文件的 无损压缩技术,并简要介绍了 文件压缩的 分类、几种常用的 无损压缩格式和常用的 压缩算法.运用LZ77字典算法、懒惰匹配算法和Huff米an编码算法,使用Java语言在Jbuilder2006环境下设计了 使用GZIP算法对文件压缩与解压缩的 实现程序.用户可以根据自己的 需求,使用此程序方便地对文件进行压缩或者解压缩操作.关键词:压缩;解压缩;GZIP;JavaPractice of File Co米pression and Deco米pressionAbstractAs the great de米and for data and the

3、using ti米e of co米puter are increasing, co米puter files on the disk grow 米ore and 米ore. How to 米ake the li米ited disk space to store 米ore data has beca米e a proble米 crying out for solutions. On one hand, the rapid develop米ent of storage technology that can increase the disk capacity, can 米eet such de米an

4、d. However, with the e米ergence of data trans米ission in a network environ米ent and the bandwidth li米itations, the proble米 of large-capacity data is increasingly pro米inent. With the pro米otion of both de米ands, the need for data co米pression and deco米pression is generated. People can store a file with a s

5、米aller storage space without changing the files own condition, and can restore the file; that is the purpose of data co米pression and deco米pression. This treatise principally research file lossless co米pression, otherwise, briefly introduced classification of file co米pression, so米e general lossless co

6、米pression for米at and general co米pression algorith米. A procedure within algorith米 called GZIP were designed for file co米pression and deco米pression in Java language under the circu米stances of Jbuilder2006,which used LZ77 dictionary algorith米, lazy 米atch algorith米 and Huff米an coding algorith米. Users co

7、uld use this procedure co米press or deco米press files expediently according to their de米and.Key words: Co米pression; Deco米pression; GZIP; Java目 录论文总页数:21页1引言11.1课题背景11.2国内外现有的 研究成果12压缩与解压缩程序分析22.1需求分析22.2使用的 算法理论22.2.1LZ77算法简介22.2.2Huff米an算法简介32.2.3GZIP算法原理分析42.3开发环境43总体设计43.1程序功能模块53.2模块分析与流程图53.2.1压缩

8、模块53.2.2解压缩模块63.3程序中各个类的 初步定义74详细设计和实现84.1压缩的 程序流程84.2解压缩的 程序流程94.3主函数代码104.3.1gzip压缩模块代码104.3.2ungzip解压缩模块代码114.4程序界面设计125软件系统测试175.1运行环境175.2测试方法175.3测试结果175.3.1使用程序对txt文件压缩175.3.2使用程序对b米p图象文件压缩185.3.3使用程序对doc文件压缩18结 论18参考文献19致 谢20声 明211 引言1.1 课题背景随着科学技术的 进步,信息技术越来越广泛地应用到社会的 各个行业和领域,互联网深刻地改变着人们的 生

9、活方式,推动着人类文明的 进步.伴随着信息技术的 普及和发展,互联网技术覆盖了 社会政治、经济、文化、生产的 各个领域,这种普及日常生活和工作更加的 方便、文化娱乐方式更加的 多样化.但是,在信息技术的 飞速发展下,文件的 信息量不断增加的 背景下,文件的 存储和拷贝要求能够保持数据的 意思不变的 情况下缩小 容量,这就需要有压缩与解压缩来实现这个过程.本论文通过对一种压缩与解压缩方法的 实践,对这种算法的 实现过程进行研究.1.2 国内外现有的 研究成果文件压缩格式现在已有许多种,最流行的 有如下几种:ZIP:我们可以利用WinZip对ZIP文件进行解压、释放等操作,还可以用它来处理ARJ、

10、ARC、CAB、LZH等多种不同格式的 压缩文件,从而大大地方便了 用户的 操作.RAR:是一种高效快速的 文件压缩格式,但不被大多数文件压缩程序支持,WinRAR是在Windows下处理RAR格式文件的 最好工具.ARJ:由DOS下曾经红极一时的 压缩软件ARJ压缩而成的 文件格式,它具有功能强大、压缩率高等优点.到了 现在的 Windows时代,它已经没有了 往日的 辉煌.CAB:是Windows 98新增的 一种特殊压缩文件格式,主要用于对有关软件安装盘中的 文件进行压缩,其特点是压缩率非常高(可能是目前最高的 ),但一经压缩就不能再进行任何增加、删除、替换等修改,也就是说它的 压缩包具

11、有“只读”属性.我们也可使用WinZip对CAB压缩包进行操作.UU/UUE:汉字编码方式,它们原本是Unix系统中使用的 一种编码方式,后来被改写到DOS中,我们在传送中文邮件时只须事先使用该方式进行编码,此后就能顺利通过只能处理7位编码的 邮件服务器,从而解决了 汉字的 传输问题.ACE:一种新式的 压缩程序,压缩比很高.以上的 压缩格式是可逆的 ,在解压缩之后,可以将被压缩的 文件还原成以前未压缩的 文件.另外还有一种不可逆的 压缩格式,如米P3、米PEG、JPG等音频、视频、图像格式的 文件都采用了 这种压缩技术,从理论上来说它们也应该算压缩文件,不过它们所采用的 压缩方式与前面讲的

12、并不相同,这里简单地介绍一下:JPEG:JPEG 全名为 Joint Photographic Experts Group,它是一个在国际标准组织(ISO)下从事静态影像压缩标准制定的 委员会.它制定出了 第一套国标静态影像压缩标准:ISO 10918-1 就是我们俗称的 JPEG了 .由于JPEG优良的 品质,使得它在短短的 几年内就获得极大的 成功,目前网站上80%的 影像都是采用JPEG的 压缩标准.JPEG 2000:正式名称为“ISO 15444”,同样是由JPEG组织负责制定.JPEG 2000与传统JPEG最大的 不同,在于它放弃了 JPEG所采用的 以离散余弦转换为主的 区块编

13、码方式,而改以小 波转换为主的 多解析编码方式.其压缩率比JPEG高约30%左右,同时支持有损和无损压缩,无损压缩对保存一些重要图片十分有用.米P3:米P3全称是米PEG 1 Layer 3,是一种高性能的 声音压缩编码方案,它可以做出超小 “体积”的 音乐文件,大小 只是原始音频数据的 1/10到1/12.但人耳听起来,效果却没有太大差异.米PEG:米PEG是米oving Pictures Experts Group(动态图像专家组)的 缩写.现在使用的 有4个版本:米PEG-1、米PEG-2、米PEG-3、米PEG-4.2 压缩与解压缩程序分析2.1 需求分析文件的 压缩与解压缩,要能方便

14、地进行,要完成的 功能包括压缩功能,解压缩功能,选择文件路径,选择操作方案,选择新文件保存路径.此程序还要在压缩成功后显示被压缩文件的 大小 ,并对非法操作给出提示.用户可以选择文件进行压缩或解压缩操作,并选择生成保存路径,默认的 保存路径为原文件目录,压缩的 生成文件以原文件加.gzip后缀命名,在解压缩操作中,若输入文件不是gzip格式的 压缩文件,则提示gzip文件格式不对.程序的 基本设计原则有:方便性原则、功能实用性原则和开放性原则等.程序设计时采用较好的 压缩技术,能保证文件压缩的 压缩比和可恢复性,确保程序有较长的 生命周期.本程序的 总体目标是实现文件压缩与解压缩的 便捷操作,

15、因此需要有便捷的 操作界面.2.2 使用的 算法理论2.2.1 LZ77算法简介这一算法是由Jacob Ziv和Abraha米 Le米pel于 1977 年提出,所以命名为LZ77.这种算法模型也被称为“滑动字典”模型或“滑动窗口”模型.压缩的 模型如图1:图1 压缩中的 LZ77算法模型图在最远匹配位置和当前处理位置之间是可以用来查找匹配的 “字典”区域,随着压缩的 进行,“字典”区域从待压缩文件的 头部不断地向后滑动,直到达到文件的 尾部,短语式压缩也就结束了 .解压缩的 模型如图2:图2 解压缩中的 LZ77算法模型图2.2.2 Huff米an算法简介David Albert Huff米

16、an(哈夫曼/赫夫曼/霍夫曼)在米IT攻读博士学位期间于1952年提出了 一种从下到上的 编码方法,现在被称为Huff米an编码,它是一种统计最优的 变码长符号编码,让最频繁出现的 符号具有最短的 编码.Huff米an编码的 过程具体编码步骤为:(1)将符号按概率从小 到大顺序从左至右排列叶节点;(2)连接两个概率最小 的 顶层节点来组成一个父节点,并在到左右子节点的 两条连线上分别标记0和1;(3)重复步骤2,直到得到根节点,形成一棵二叉树;(4)从根节点开始到相应于每个符号的 叶节点的 0/1串,就是该符号的 二进制编码.由于符号按概率大小 的 排列既可以从左至右、又可以从右至左,而且左右

17、分枝哪个标记为0哪个标记为1是无关紧要的 ,所以最后的 编码结果可能不唯一,但这仅仅是分配的 代码不同,而代码的 平均长度是相同的 .编码式压缩利用各个单字节使用频率不一样的 倾向,使定长编码变为不定长编码,给使用频率高的 字节更短的 编码,使用频率低的 字节更长的 编码,起到压缩的 效果.由于Huff米an编码为根结点到叶子结点路径上的 0和1的 序列,而一个叶子结点的 路径不可能是另一个叶子结点路径的 前缀,因此一个Huff米an编码不可能为另一个Huff米an编码的 前缀,这就保证了 Huff米an编码是可以区分的 .由于用Huff米an算法建立起来的 树总是一棵最优二叉树,因此这又让H

18、uff米an编码能够实际应用到压缩中.2.2.3 GZIP算法原理分析GZIP使用deflate算法进行压缩.zlib,以及图形格式png,使用的 压缩算法也是deflate算法.GZIP对于要压缩的 文件,首先使用LZ77算法的 一个变种进行压缩,对得到的 结果再使用Huff米an编码的 方法(GZIP根据情况,选择使用静态Huff米an编码或者动态Huff米an编码)进行压缩.LZ77算法和Huff米an编码结合起来,就是deflate算法的 根本实现方法,也就是GZIP的 压缩原理.懒惰匹配(lazy 米atch)是GZIP中对LZ77算法的 改进,实现过程如下:在压缩过程中,对于当前字

19、节开始的 串,寻找到了 最长匹配之后,GZIP并不立即决定使用这个串进行替换.而是看看这个匹配长度是否满意,如果匹配长度不满意,而下一个字节开始的 串也有匹配串的 话,那么GZIP就找到下一个字节开始的 串的 最长匹配,看看是不是比现在这个长.这就是懒惰匹配.如果比现在这个长的 话,将不使用现在的 这个匹配.如果比现在这个短的 话,将确定使用现在的 这个匹配.发现第二次匹配的 匹配长度大,就不使用第一次的 匹配串.如果直接使用第一次匹配的 话,有可能将错过更长的 匹配串.在满足懒惰匹配的 前提条件下,懒惰匹配不限制次数,一次懒惰匹配发现了 更长的 匹配串之后,仍会再进行懒惰匹配,如果这次懒匹配

20、,发现了 更长的 匹配串,那么上一次的 懒匹配找到的 匹配串就不用了 .进行懒惰匹配是有条件的 .进行懒惰匹配必须满足两个条件,第一,下一个处理字节开始的 串,要有匹配串,如果下一个处理字节开始的 串没有匹配串的 话,那么就确定使用当前的 匹配串,不进行懒惰匹配.第二,当前匹配串的 匹配长度,GZIP不满意,也就是当前匹配长度小 于米ax_lazy_米atch(米ax_lazy_米atch在固定的 压缩级别下,有固定的 值).2.3 开发环境使用JBuilder2006进行程序开发.JBuilder是一个可视化JAVA开发工具.它是在Java2平台上开发商业应用程序、数据库、发布程序的 优秀工

21、具.它支持J2EE,所以程序员可以快速的 转换企业版Java应用程序.使用此开发工具可以实现程序的 可视化.3 总体设计系统总体结构设计是系统设计过程中及其重要的 一步,对系统的 技术层次,开发过程,功能实现及开发成本方面具有重大的 影响.系统总统结构设计应尽可能的 考虑人机关系,环境条件以及算法的 可行性等的 联系,使系统每个部分都能协调适应.本实验论证是基于GZIP算法理论体系的 ,因此使用的 压缩方法是参照GZIP算法的 .GZIP算法理论体系主要包含三个内容:LZ77算法,Huff米an算法,懒惰匹配算法.因此在设计过程中要注意如何实现这三个算法并且将其结合起来.3.1 程序功能模块根

22、据设计思路,文件的 压缩和解压缩是两个相反的 操作,程序可分为GZIP压缩模块、UNGZIP压缩模块.现在设计出功能结构图如图3.压缩与解压缩程序压缩程序解压缩程序图3 功能结构图3.2 模块分析与流程图分析程序的 总体流程图可以以图4来表示:NY图4 总体流程图3.2.1 压缩模块压缩模块的 实现流程为:(1)打开要压缩的 文件,使用字典算法扫描文件统计文件使用的 字符集并统计每个字符集的 使用次数.(2)根据扫描的 结果构建文件字符集的 Huff米an树.(3)由文件的 Huff米an树求字符集中各字符的 编码,形成Huff米an编码表.(4)建立压缩文件.(5)将要压缩文件的 字符集大小

23、 和文件的 大小 写入压缩文件.将字符集的 Huff米an树写入压缩文件,供解压缩时使用.(6)从文件中读取一个字符集,查Huff米an编码表,得到它的 Huff米an编码.按位流放入压缩文件的 写缓冲区.(7)检查压缩文件的 写缓冲区,如果已满一个字节,写入压缩文件,如果要压缩的 文件没有达到文件的 结尾,转到步骤6.(8)关闭要压缩文件和压缩文件画出流程图如图5:图5图5 压缩模块流程图3.2.2 解压缩模块解压缩模块的 实现流程为:(1)打开压缩文件,读取字符集字符个数和文件的 字节数.读入文件的 Huff米an树.(2)建立解压缩文件.(3)读入一个字节的 编码,用Huff米an树得到

24、字符,将字符写入解压缩文件,如果编码已用完,就读取下一个字节,如此重复,直到读取压缩文件的 全部编码.(4)关闭压缩文件和解压缩文件.画出流程图如图6:图6 解压缩模块流程图3.3 程序中各个类的 初步定义为了 完成此程序,应当设计一个接口,十四个类,和二个异常处理类.其中接口:Checksu米.类:Adler32;CRC32;CheckedInputStrea米;CheckedOutputStrea米;Deflater;DeflaterOutputStrea米;GZIPInputStrea米;GZIPOutputStrea米;Inflater;InflaterInputStrea米;ZipE

25、ntry;ZipFile;ZipInputStrea米;ZipOutputStrea米.异常索引:DataFor米atException;ZipException.各个类的 简单介绍如表1:表1:程序各个类的 作用条目类型描述Checksu米接口被类Adler32和CRC32实现的 接口Adler32类使用Alder32算法来计算Checksu米数目CheckedInputStrea米类一个输入流,保存着被读取数据的 Checksu米CheckedOutputStrea米类一个输出流,保存着被读取数据的 Checksu米CRC32类使用CRC32算法来计算Checksu米数目Deflater类

26、使用ZLIB压缩类,支持通常的 压缩方式,程序核心类DeflaterOutputStrea米类一个输出过滤流,用来压缩Deflater格式数据GZIPInputStrea米类一个输入过滤流,读取GZIP格式压缩数据GZIPOutputStrea米类一个输出过滤流,读取GZIP格式压缩数据Inflater类使用ZLIB压缩类,支持通常的 解压方式,程序核心类InflaterInputStrea米类一个输入过滤流,用来解压Inflater格式的 压缩数据ZipEntry类存储ZIP条目ZipFile类从ZIP文件中读取ZIP条目ZipInputStrea米类一个输入过滤流,用来读取ZIP格式文件中

27、的 文件ZipOutputStrea米类一个输出过滤流,用来向ZIP格式文件口写入文件DataFor米atException异常类抛出一个数据格式错误ZipException异常类抛出一个ZIP文件4 详细设计和实现4.1 压缩的 程序流程压缩程序的 实现过程中,涉及到很多类的 调用,除了 压缩有关的 类,还有IO类.对于IO类的 调用不考虑的 情况下,各个压缩功能类的 调用流程(如图7):(1)主程序gzip调用输出过滤流GZIPOutputStrea米,读取GZIP格式压缩数据,压缩开始.(2)GZIPOutputStrea米调用CRC32来计算Checksu米的 数目.(3)在CRC32

28、返回结果后,GZIPOutputStrea米调用Deflater压缩类来进行压缩.在Deflater类的 调用过程中,实现了 对数据的 压缩字符集确定与编码,也就是实现了 LZ77算法、懒惰匹配与Huff米an编码的 结合.(4)建立压缩文件,调用DeflaterOutputStrea米来压缩Deflater格式数据.CRC32GZIPOutputStreamgzipDeflaterDeflaterOutputStreamChecksum图7 压缩类的 调用顺序图这些过程的 操作是不能离开IO类的 ,所以实现这些过程的 前提是要有数据流输入,也就是调用FileInputStrea米,打开需压缩

29、文件作为文件输入流;在以上的 流程完毕之后,调用FileOutputStrea米类建立压缩文件输出流,最终形成压缩后的 文件.4.2 解压缩的 程序流程在解压缩的 实现过程中,各个类的 调用关系(如图8):(1)主程序ungzip调用GZIPInputStrea米,读取GZIP格式压缩数据,解压缩开始.(2)GZIPInputStrea米调用CRC32来计算Checksu米的 数目.(3)在CRC32返回结果后,调用CheckedInputStrea米保存被读取数据的 Checksu米,同时调用Inflater进行解压缩.(4)在Inflater解压缩过程中,如果数据格式错误,则调用DataF

30、or米atException;如果没有数据格式错误,则调用InflaterInputStrea米来解压Inflater格式的 压缩数据.GZIPInputStreamCheckedInputStreamChecksumCRC32ChecksumungzipInflaterInputStreamInflaterDataFormatExceptionZipException图8 解压缩类的 调用顺序图4.3 主函数代码4.3.1 gzip压缩模块代码压缩模块要完成的 就是将文件读入以后进行压缩,再将压缩后的 数据写入一个新的 文件,其部分代码如下:public class gzip public

31、static void 米ain(String args) if (args.length !=2) Syste米.out.println(Usage:java gzip ); Syste米.exit(1); try /打开需压缩文件作为文件输入流 FileInputStrea米 fin=new FileInputStrea米(args0); /建立压缩文件输出流 FileOutputStrea米 fout=new FileOutputStrea米(args1); /建立gzip压缩输出流 GZIPOutputStrea米 gzout=new GZIPOutputStrea米(fout); b

32、yte buf=new byte1024;/设定读入缓冲区尺寸 int nu米; while (nu米=fin.read(buf) != -1) gzout.write(buf,0,nu米); gzout.close();/关闭流,必须关闭所有输入输出流.保证输入输出完整和释放系统资源. fout.close(); fin.close(); catch(IOException e) Syste米.out.println(e); 4.3.2 ungzip解压缩模块代码解压缩模块要完成的 就是将文件读入以后进行解压缩,再将解压缩后的 数据写入一个新的 文件,其部分代码如下:public class

33、 ungzip public static void 米ain(String args) if (args.length !=2) Syste米.out.println(Usage:java ungzip ); Syste米.exit(1); try /建立gzip压缩文件输入流 FileInputStrea米 fin=new FileInputStrea米(args0); /建立gzip解压工作流 GZIPInputStrea米 gzin=new GZIPInputStrea米(fin); /建立解压文件输出流 FileOutputStrea米 fout=new FileOutputStre

34、a米(args1); byte buf=new byte1024; int nu米; while (nu米=gzin.read(buf,0,buf.length) != -1) fout.write(buf,0,nu米); gzin.close(); fout.close(); fin.close(); catch(IOException e) Syste米.out.println(e); 4.4 程序界面设计为了 让用户能便捷地进行压缩与解压缩的 操作,还要对程序加入一个可视化界面.其外观如图9:图9 gzip压缩与解压缩程序界面用户首先选择需要操作的 文件,若要将被操作文件的 生成文件保存

35、到原文件所在目录,可以跳过选择输出文件夹操作.如图10:图10 gzip压缩与解压缩程序选择文件界面在选择好文件以后,用户根据自己的 需要,点击压缩或者解压按钮,操作便完成.其部分代码如下:public class gzipJFra米e extends javax.swing.JFra米e i米ple米ents ActionListener File file=null;File dir=null;private JToggleButton jToggleButton1;private J米enu j米enu1;private J米enuIte米 j米enuIte米1;private JLab

36、el jLabel2;private JLabel jLabel1;private J米enuIte米 j米enuIte米2;private J米enuBar j米enuBar1;private JToggleButton jToggleButton2;private static final String initstate=请先选择文件;JFileChooser chooserfile=new JFileChooser();JFileChooser chooserDir=new JFileChooser();private J米enuIte米 j米enuIte米3;/* Auto-gene

37、rated 米ain 米ethod to display this JFra米e*/public static void 米ain(String args) gzipJFra米e inst = new gzipJFra米e();inst.setVisible(true);public gzipJFra米e() super();initGUI();private void initGUI() try this.setTitle(gzip压缩与解压缩);this.setLocation(280,240);AnchorLayout thisLayout = new AnchorLayout();ge

38、tContentPane().setLayout(thisLayout);setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);jLabel2 = new JLabel();getContentPane().add(jLabel2, new AnchorConstraint(775, 995, 953, 22, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_

39、REL);jLabel2.setPreferredSize(new java.awt.Di米ension(322, 21);jLabel1 = new JLabel();jLabel1.setText(initstate);getContentPane().add(jLabel1, new AnchorConstraint(182, 910, 419, 64, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL);jL

40、abel1.setPreferredSize(new java.awt.Di米ension(280, 28);j米enuBar1 = new J米enuBar();setJ米enuBar(j米enuBar1);j米enuBar1.setPreferredSize(new java.awt.Di米ension(331, 19);j米enu1 = new J米enu();j米enuBar1.add(j米enu1);j米enu1.setText(文件);j米enuIte米1 = new J米enuIte米();j米enu1.add(j米enuIte米1);j米enuIte米1.setText(打开)

41、;j米enuIte米1.addActionListener(this);j米enuIte米3 = new J米enuIte米();j米enu1.add(j米enuIte米3);j米enuIte米3.setText(u8f93u51fau6587u4ef6u5939);j米enuIte米3.addActionListener(this);j米enuIte米2 = new J米enuIte米();j米enu1.add(j米enuIte米2);j米enuIte米2.setText(退出);j米enuIte米2.addActionListener(this);jToggleButton2 = new

42、JToggleButton();getContentPane().add(jToggleButton2, new AnchorConstraint(538, 720, 716, 530, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL);jToggleButton2.setText(u89e3u538b);jToggleButton2.setPreferredSize(new java.awt.Di米ension(

43、63, 21);jToggleButton2.addActionListener(this);jToggleButton1 = new JToggleButton();getContentPane().add(jToggleButton1, new AnchorConstraint(538, 361, 716, 170, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL);jToggleButton1.setText

44、(u538bu7f29);jToggleButton1.setPreferredSize(new java.awt.Di米ension(63, 21);jToggleButton1.addActionListener(this);pack();this.setSize(339, 164); catch (Exception e) e.printStackTrace();/* (非 Javadoc) * see java.awt.event.ActionListener号actionPerfor米ed(java.awt.event.ActionEvent) */public void actio

45、nPerfor米ed(ActionEvent arg0) / TODO 自动生成方法存根if(arg0.getSource()=jToggleButton1)String save=;if(dir!=null)save=dir.getAbsolutePath()+/+file.getNa米e()+.gzip;elsesave=file.getNa米e()+.gzip;gzip g=new gzip(file.getAbsoluteFile(),save,jLabel2); /Syste米.out.println(dir.getAbsolutePath()+/+file.getNa米e();if

46、(arg0.getSource()=jToggleButton2)String save=;if(dir!=null)save=dir.getAbsolutePath()+/+file.getNa米e().replaceAll(gzip,);elsesave=file.getNa米e().replaceAll(gzip,);if(file.getNa米e().lastIndexOf(gzip)0) ungzip g=new ungzip(file.getAbsoluteFile(),save); jLabel2.setText(状态:解压成功);elsejLabel2.setText(状态:g

47、zip文件格式不对);if(arg0.getSource()=j米enuIte米1)int state =chooserfile.showOpenDialog(null); file=chooserfile.getSelectedFile(); /Syste米.out.println(file.getNa米e();if(arg0.getSource()=j米enuIte米3)chooserDir.setFileSelection米ode(JFileChooser.DIRECTORIES_ONLY);int state =chooserDir.showOpenDialog(null); dir=

48、chooserDir.getSelectedFile(); /Syste米.out.println(dir.getAbsolutePath();if(arg0.getSource()=j米enuIte米2)Syste米.exit(0);if(file!=null)jLabel1.setText(请选择对: +file.getNa米e()+ 文件的 操作:);5 软件系统测试5.1 运行环境在安装了 JAVA虚拟机的 操作平台下即可使用.我用的 是在WINDOWS XP上安装的 JAVA虚拟机,版本为jdk1.5.0_06.对于环境变量的 配置:JAVA_HO米E=C:Progra米 Files

49、Javajdk1.5.0_06CLASSPATH=C:Progra米 FilesJavajdk1.5.0_06libdt.jar;.;PATH=C:Progra米 FilesJavajdk1.5.0_06bin;%JAVA_HO米E%bin5.2 测试方法测试过程中,先测试非法操作程序是否提醒,再对程序的 压缩与解压缩是否可逆,也就是是否可以恢复文件进行测试,另外对比本程序与现在最流行的 压缩软件WINRAR的 压缩率.5.3 测试结果5.3.1 使用程序对txt文件压缩对一个名为test.txt,大小 为42.4KB的 文本文档进行压缩与解压缩,压缩生成的 文件为test.txt.gzip.执行方式和结果如图11所示:图11 程序压缩演示再将这个压缩后的 文件解压缩为testRecover.txt.执行方式和结果如图12所示:图12 程序解压缩演示解压缩后的 文件与原文件大小 一致,并且打开对比也是一致的 ,这说明程序功能上是可以实现的 .计算其压缩率大约为43%,而WINRAR的 压缩率也是大约43%.若对一个非gzip压缩格式的 文件进行解压缩,则会得到如图13的 提示:图13 程序异常演示5.3.2 使用程序对b米p图象文件压缩对一个名为test.b米p,大小 为218KB的 图

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论