您的位置:首页资讯压缩软件 → 利用Java实现zip压缩/解压缩

利用Java实现zip压缩/解压缩

时间:2004/11/7 3:39:00来源:本站整理作者:蓝点我要评论(0)

由于网络带宽有限,所以数据文件的压缩有利于数据在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压缩文件的写输出流,支持压缩和非压缩entry。下面是它的



几个函数:



  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<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();



  try{



  ∥创建一个文件实例



  File f=new File(filename);



  if(!f.exists()) return; ∥文件不存在,则返回



  ∥用文件输入流构建ZIP压缩输入流



  ZipInputStream zipis=new ZipInputStream(new FileInputStream(f));



  zipis.getNextEntry();



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



  DataInputStream dis=new DataInputStream(zipis);



  ∥用ZIP输入流构建DataInputStream



  doc=dis.readUTF();∥读取文件内容



  dis.close();∥关闭文件



  doczipsize = f.length();∥获取ZIP文件长度



  showTextandInfo();∥显示数据



  }



  catch(IOException ioe){



  System.out.println(ioe);



  }



  }



  private void saveFile(){



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



  FileDialog dlg=new FileDialog(this,"Save",FileDialog.SAVE);



  dlg.show();



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



  try{



  ∥创建一个文件实例



  File f=new File(filename);



  if(!f.exists()) return; ∥文件不存在,则返回



  ∥用文件输出流构建ZIP压缩输出流



  ZipOutputStream zipos=new ZipOutputStream(new FileOutputStream(f));



  zipos.setMethod(ZipOutputStream.DEFLATED); ∥设置压缩方法



  zipos.putNextEntry(new ZipEntry("zip"));



  ∥生成一个ZIP entry,写入文件输出流中,并将输出流定位于entry起始处。



  DataOutputStream os=new DataOutputStream(zipos);



  ∥用ZIP输出流构建DataOutputStream;



  os.writeUTF(doc);∥将随机生成的数据写入文件中



  os.close();∥关闭数据流



  doczipsize = f.length();



  ∥获取压缩文件的长度



  showTextandInfo();∥显示数据



  }



  catch(IOException ioe){



  System.out.println(ioe);



  }



  }



  private void showTextandInfo(){



  ∥显示数据文件和压缩信息



  textarea.replaceRange(doc,0,textarea.getText().length());



  infotip.setText("uncompressed size: "+doc.length()+"compressed size: "+dc zipsize);



  }



  public void actionPerformed(ActionEvent e){



  String arg = e.getActionCommand();



  if ("New".equals(arg)) randomData();



  else if ("Open".equals(arg)) openFile();



  else if ("Save".equals(arg)) saveFile();



  else if ("Exit".equals(arg)){



   dispose();∥关闭窗口



   System.exit(0);∥关闭程序



  }



  else {



   System.out.println("no this command!");



  }



  }



  }  




相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 2345好压怎么解压 好压360压缩怎么减少关联的巧用快压合并MP3文件压缩文件损坏怎么办?W

最新文章 快压怎么使用托盘挂载快压怎么使用压缩包直 快压怎么使用右键制作超高压缩比格式快压怎么制作固实压缩包 快压制作固实压缩快压怎么制作自解压安装包快压怎么加密 快压怎么设置密码

人气排行 gzip是什么文件?gzip文件怎么打开?2345好压怎么解压 好压怎么解压文件2345好压怎么压缩文件2345好压忘记密码怎么办 2345好压密码找回方2345好压怎么删除 2345好压卸载不了解决方法压缩文件格式有哪些压缩文件损坏怎么办?WinRAR内置压缩文件修复快压如何压缩文件 快压压缩文件方法