java算法实现压缩及解压缩Word文档格式.docx

上传人:b****2 文档编号:15161650 上传时间:2022-10-28 格式:DOCX 页数:7 大小:17.30KB
下载 相关 举报
java算法实现压缩及解压缩Word文档格式.docx_第1页
第1页 / 共7页
java算法实现压缩及解压缩Word文档格式.docx_第2页
第2页 / 共7页
java算法实现压缩及解压缩Word文档格式.docx_第3页
第3页 / 共7页
java算法实现压缩及解压缩Word文档格式.docx_第4页
第4页 / 共7页
java算法实现压缩及解压缩Word文档格式.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

java算法实现压缩及解压缩Word文档格式.docx

《java算法实现压缩及解压缩Word文档格式.docx》由会员分享,可在线阅读,更多相关《java算法实现压缩及解压缩Word文档格式.docx(7页珍藏版)》请在冰豆网上搜索。

java算法实现压缩及解压缩Word文档格式.docx

i

FileInputStreamfi=newFileInputStream(file[i]);

origin=newBufferedInputStream(fi,BUFFER);

ZipEntryentry=newZipEntry(file[i].getName());

out.putNe某tEntry(entry);

intcount;

while((count=origin.read(data,0,BUFFER))!

=-1){out.write(data,0,count);

}

origin.cloe();

out.cloe();

}catch(E某ceptione){e.printStackTrace();

}}}解压缩的

importjava.util.Enumeration;

importjava.util.zip.ZipFile;

publicclaUnZip{

StringfileName=\StringfilePath=\

ZipFilezipFile=newZipFile(fileName);

Enumerationemu=zipFile.entrie();

inti=0;

while(emu.haMoreElement()){

ZipEntryentry=(ZipEntry)emu.ne某tElement();

//会把目录作为一个file读出一次,所以只建立目录就可以,之下的文件还会被迭代到。

if(entry.iDirectory()){

newFile(filePath+entry.getName()).mkdir();

continue;

BufferedInputStreambi=new

BufferedInputStream(zipFile.getInputStream(entry));

Filefile=newFile(filePath+entry.getName());

//加入这个的原因是zipfile读取文件是随机读取的,这就造成可能先读取一个文件

//而这个文件所在的目录还没有出现过,所以要建出目录来。

Fileparent=file.getParentFile();

if(parent!

=null&

&

(!

parent.e某it())){parent.mkdir();

FileOutputStreamfo=newFileOutputStream(file);

BufferedOutputStreambo=newBufferedOutputStream(fo,BUFFER);

while((count=bi.read(data,0,BUFFER))!

=-1){

bo.write(data,0,count);

bo.fluh();

bo.cloe();

bi.cloe();

zipFile.cloe();

}}}

由于网络带宽有限,所以数据文件的压缩有利于数据在Internet上的快速传输,同时也节

省服务器的外存空间。

Java1.1实现了I/O数据流与网络数据流的单一接口,因此数据的压缩、网络传输和解

压缩的实现比较容易,下面介绍利用ZipEntry、ZipInputStream和ZipOutputStream三个Java

类实现zip数据压缩方式的编程方法。

zip压缩文件结构:

一个zip文件由多个entry组成,每个entry有一个唯一的名称,entry的数据项存储压缩数据。

与zip文件有关的几个Java类·

类ZipEntry

publicZipEntry(Stringname);

name为指定的数据项名。

·

类ZipOutputStream

ZipOutputStream实现了zip压缩文件的写输出流,支持压缩和非压缩entry。

下面是它的几个函数:

publicZipOutputStream(OutputStreamout);

∥利用输出流out构造一个ZIP输出流。

publicvoidetMethod(intmethod);

∥设置entry压缩方法,缺省值为DEFLATED。

publicvoidputNe某tEntry(ZipEntrynewe);

∥如果当前的entry存在且处于激活状态时,关闭它,在zip文件中写入新的entry-newe

并将数据流定位于entry数据项的起始位置,压缩方法为etMethod指定的方法。

类ZipInputStream

ZipInputStream实现了zip压缩文件的读输入流,支持压缩和非压缩entry。

publicZipInputStream(InputStreamin);

∥利用输入流in构造一个ZIP输出流。

publicZipEntrygetNe某tEntry();

∥返回ZIP文件中的下一个entry,并将输出流定位在此entry数据项的起始位置。

publicvoidcloeEntry();

∥关闭当前的zipentry,并将数据流定位于下一个entry的起始位置。

程序代码及其注释

下列的程序实现了数据文件zip方式的压缩和解压缩方法。

randomData()函数随机生成

50个double数据,并放在doc字符串变量中;

openFile()函数读取ZIP压缩文件;

aveFile()函数

将随机生成的数据存到ZIP格式的压缩文件中。

importjava.util.zip.某;

importjava.awt.event.某;

importjava.awt.某;

importjava.lang.Math;

importjava.io.某;

publicclaTetZipe某tendFrameimplementActionLitener{Te某tAreate某tarea;

∥显示数据文件的多行文本显示域

Te某tFieldinfotip;

∥显示数据文件未压缩大小及压缩大小单行文本显示域

Stringdoc;

∥存储随机生成的数据longdoczipize=0;

∥压缩数据文件的大小publicTetZip(){∥生成菜单

MenuBarmenubar=newMenuBar();

etMenuBar(menubar);

Menufile=newMenu(\menubar.add(file);

MenuItemneww=newMenuItem(\neww.addActionLitener(thi);

file.add(neww);

MenuItemopen=newMenuItem(\open.addActionLitener(thi);

file.add(open);

MenuItemave=newMenuItem(\ave.addActionLitener(thi);

file.add(ave);

MenuIteme某it=newMenuItem(\

e某it.addActionLitener(thi);

file.add(e某it);

∥随机生成的数据文件的多行文本显示域add(\∥提示文本原始大小、压缩大小的单行文本显示域add(\}

publictaticvoidmain(Stringarg[]){TetZipok=newTetZip();

ok.etTitle(\ok.etSize(600,300);

ok.how();

privatevoidrandomData(){

∥随机生成50个double数据,并放在doc字符串变量中。

doc=\

for(inti=1;

i<

51;

i++){doublerdm=Math.random()某10;

doc=doc+newDouble(rdm).toString();

if(i%5==0)doc=doc+\eledoc=doc+\}

doczipize=0;

howTe某tandInfo();

privatevoidopenFile(){

∥打开zip文件,将文件内容读入doc字符串变量中。

FileDialogdlg=newFileDialog(thi,\dlg.how();

Stringfilename=dlg.getDirectory()+dlg.getFile();

try{

∥创建一个文件实例

Filef=newFile(filename);

if(!

f.e某it())return;

∥文件不存在,则返回∥用文件输入流构建ZIP压缩输入流

ZipInputStreamzipi=newZipInputStream(newFileInputStream(f));

zipi.getNe某tEntry();

∥将输入流定位在当前entry数据项位置

DataInputStreamdi=newDataInputStream(zipi);

∥用ZIP输入流构建DataInputStreamdoc=di.readUTF();

∥读取文件内容di.cloe();

∥关闭文件

doczipize=f.length();

∥获取ZIP文件长度howTe某tandInfo();

∥显示数据}

catch(IOE某ceptionioe){Sytem.out.println(ioe);

privatevoidaveFile(){

∥打开zip文件,将doc字符串变量写入zip文件中。

∥文件不存在,则返回∥用文件输出流构建ZIP压缩输出流

ZipOutputStreamzipo=newZipOutputStream(newFileOutputStream(f));

zipo.etMethod(ZipOutp

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 职业技术培训

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1