JAVA基础:利用Java实现zip压缩解压缩

文章作者 100test 发表时间 2007:03:14 17:03:33
来源 100Test.Com百考试题网


由于网络带宽有限,所以数据文件的压缩有利于数据在Internet上的快速传输,同时也节省服务器的外存空间。Java 1.1实现了I/O数据流与网络数据流的单一接口,因此数据的压缩、网络传输和解压缩的实现比较容易,下面介绍利用ZipEntry、ZipInputStream和ZipOutputStream三个Java 类实现zip数据压缩方式的编程方法。
  zip压缩文件结构:一个zip文件由多个entry组成,每个entry有一个唯一的名称,entry的数据项存储压缩数据。

  与zip文件有关的几个Java类

  ·类ZipEntry

  public ZipEntry(String name).

  name为指定的数据项名。

  ·类ZipOutputStream

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

  public ZipOutputStream(OutputStream out).

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

  public void setMethod(int method).

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

  public void putNextEntry(ZipEntry newe).

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

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

  ·类ZipInputStream

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

几个函数:

  public ZipInputStream(InputStream in).

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

  public ZipEntry getNextEntry().

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

  public void closeEntry().

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

  程序代码及其注释

  下列的程序实现了数据文件zip方式的压缩和解压缩方法。randomData()函数随机生成50个double数据,并放在doc字符串变量中.openFile()函数读取ZIP压缩文件.saveFile()函数将随机生成的数据存到ZIP格式的压缩文件中。

  import java.util.zip.*.

  import java.awt.event.*.

  import java.awt.*.

  import java.lang.Math.

  import java.io.*.

  public class TestZip extends Frame implements
ActionListener {

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

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

  String doc. ∥存储随机生成的数据

  long doczipsize = 0.∥压缩数据文件的大小

  public TestZip(){

  ∥生成菜单

  MenuBar menubar = new MenuBar().

  setMenuBar(menubar).

  Menu file = new Menu("File",true).

  menubar.add(file).

  MenuItem neww= new MenuItem("New").

  neww.addActionListener(this).

  file.add(neww).

  MenuItem open=new MenuItem("Open").

  open.addActionListener(this).

  file.add(open).

  MenuItem save=new MenuItem("Save").

  save.addActionListener(this).

  file.add(save).

  MenuItem exit=new MenuItem("Exit").

  exit.addActionListener(this).

  file.add(exit).

  ∥随机生成的数据文件的多行文本显示域

  add("Center",textarea = new TextArea()).

  ∥提示文本原始大小、压缩大小的单行文本显示域

  add("South",infotip = new TextField()).

  }

  public static void main(String args[]){

  TestZip ok=new TestZip().

  ok.setTitle("zip sample").

  ok.setSize(600,300).

  ok.show().

  }

  private void randomData(){

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

  doc="".

  for(int i=1.i&.lt.51.i ){

   double rdm=Math.random()*10.

   doc=doc new Double(rdm).toString().

   if(i%5 == 0) doc=doc "\n".

   else doc=doc " ".

  }

  doczipsize = 0.

  showTextandInfo().

  }

  private void openFile(){

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

  FileDialog dlg=new
FileDialog(this,"Open",FileDialog.LOA D).

  dlg.show().

  String filename=dlg.getDirectory() dlg.getFile().

相关文章


64位环境中的Java(上)
JAVA教程:解析Java的多线程机制
JAVA模拟题:TestoftheJavaSkill(1)
JavaSE6.0桌面API编程 (中)
JAVA基础:利用Java实现zip压缩解压缩
JavaSE6.0桌面API编程 (上)
JAVA模拟题:TestoftheJavaSkill(3)
JAVA模拟题:TestoftheJavaSkill(4)
JAVA基础:语言中链表和双向链表的实现(2)
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛