JAVA教程之使用Java完成zip紧缩/解紧缩
再说说缺点:首先java功能强大的背后是其复杂性,就拿web来说,当今流行的框架有很多,什么struts,spring,jQuery等等,而这无疑增加了java的复杂性。紧缩使用Java完成zip紧缩/解紧缩( 2000年07月06日13:30)
因为收集带宽无限,以是数据文件的紧缩有益于数据在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输入流。
publicvoidsetMethod(intmethod);
∥设置entry紧缩办法,缺省值为DEFLATED。
publicvoidputNextEntry(ZipEntrynewe);
∥假如以后的entry存在且处于激活形态时,封闭它,在zip文件中写进新的entry-newe
并将数据流定位于entry数据项的肇端地位,紧缩办法为setMethod指定的办法。
・类ZipInputStream
ZipInputStream完成了zip紧缩文件的读输出流,撑持紧缩和非紧缩entry。上面是它的
几个函数:
publicZipInputStream(InputStreamin);
∥使用输出流in机关一个ZIP输入流。
publicZipEntrygetNextEntry();
∥前往ZIP文件中的下一个entry,并将输入流定位在此entry数据项的肇端地位。
publicvoidcloseEntry();
∥封闭以后的zipentry,并将数据流定位于下一个entry的肇端地位。
程序代码及其正文
以下的程序完成了数据文件zip体例的紧缩息争紧缩办法。randomData()函数随机天生
50个double数据,并放在doc字符串变量中;openFile()函数读取ZIP紧缩文件;saveFile()函数
将随机天生的数据存到ZIP格局的紧缩文件中。
importjava.util.zip.*;
importjava.awt.event.*;
importjava.awt.*;
importjava.lang.Math;
importjava.io.*;
publicclassTestZipextendsFrameimplementsActionListener{
TextAreatextarea;∥显现数据文件的多行文本显现域
TextFieldinfotip;∥显现数据文件未紧缩巨细及紧缩巨细单行文本显现域
Stringdoc;∥存储随机天生的数据
longdoczipsize=0;∥紧缩数据文件的巨细
publicTestZip(){
∥天生菜单
MenuBarmenubar=newMenuBar();
setMenuBar(menubar);
Menufile=newMenu("File",true);
menubar.add(file);
MenuItemneww=newMenuItem("New");
neww.addActionListener(this);
file.add(neww);
MenuItemopen=newMenuItem("Open");
open.addActionListener(this);
file.add(open);
MenuItemsave=newMenuItem("Save");
save.addActionListener(this);
file.add(save);
MenuItemexit=newMenuItem("Exit");
exit.addActionListener(this);
file.add(exit);
∥随机天生的数据文件的多行文本显现域
add("Center",textarea=newTextArea());
∥提醒文来源根基始巨细、紧缩巨细的单行文本显现域
add("South",infotip=newTextField());
}
publicstaticvoidmain(Stringargs[]){
TestZipok=newTestZip();
ok.setTitle("zipsample");
ok.setSize(600,300);
ok.show();
}
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+"
";
elsedoc=doc+"";
}
doczipsize=0;
showTextandInfo();
}
privatevoidopenFile(){
∥翻开zip文件,将文件内容读进doc字符串变量中。
FileDialogdlg=newFileDialog(this,"Open",FileDialog.LOAD);
dlg.show();
Stringfilename=dlg.getDirectory()+dlg.getFile();
try{
∥创立一个文件实例
Filef=newFile(filename);
if(!f.exists())return;∥文件不存在,则前往
∥用文件输出流构建ZIP紧缩输出流
ZipInputStreamzipis=newZipInputStream(newFileInputStream(f));
zipis.getNextEntry();
∥将输出流定位在以后entry数据项地位
DataInputStreamdis=newDataInputStream(zipis);
∥用ZIP输出流构建DataInputStream
doc=dis.readUTF();∥读取文件内容
dis.close();∥封闭文件
doczipsize=f.length();∥猎取ZIP文件长度
showTextandInfo();∥显现数据
}
catch(IOExceptionioe){
System.out.println(ioe);
}
}
privatevoidsaveFile(){
∥翻开zip文件,将doc字符串变量写进zip文件中。
FileDialogdlg=newFileDialog(this,"Save",FileDialog.SAVE);
dlg.show();
Stringfilename=dlg.getDirectory()+dlg.getFile();
try{
∥创立一个文件实例
Filef=newFile(filename);
if(!f.exists())return;∥文件不存在,则前往
∥用文件输入流构建ZIP紧缩输入流
ZipOutputStreamzipos=newZipOutputStream(newFileOutputStream(f));
zipos.setMethod(ZipOutputStream.DEFLATED);∥设置紧缩办法
zipos.putNextEntry(newZipEntry("zip"));
∥天生一个ZIPentry,写进文件输入流中,并将输入流定位于entry肇端处。
DataOutputStreamos=newDataOutputStream(zipos);
∥用ZIP输入流构建DataOutputStream;
os.writeUTF(doc);∥将随机天生的数据写进文件中
os.close();∥封闭数据流
doczipsize=f.length();
∥猎取紧缩文件的长度
showTextandInfo();∥显现数据
}
catch(IOExceptionioe){
System.out.println(ioe);
}
}
privatevoidshowTextandInfo(){
∥显现数据文件和紧缩信息
textarea.replaceRange(doc,0,textarea.getText().length());
infotip.setText("uncompressedsize:"+doc.length()+"compressedsize:"+dczipsize);
}
publicvoidactionPerformed(ActionEvente){
Stringarg=e.getActionCommand();
if("New".equals(arg))randomData();
elseif("Open".equals(arg))openFile();
elseif("Save".equals(arg))saveFile();
elseif("Exit".equals(arg)){
dispose();∥封闭窗口
System.exit(0);∥封闭程序
}
else{
System.out.println("nothiscommand!");
}
}
}
C#跟java类似,但是在跨平台方面理论上可以跨平台,实际上应用不大,执行性能优于java,跟C++基本一致,但是启动速度还是慢.代码安全,但容易性能陷阱. http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。 是一种语言,用以产生「小应用程序(Applet(s)) 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言 关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。 是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢? 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。 《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台 你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading) 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? 在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
页:
[1]