JAVA实现了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+" ";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输入流构建DataInputStreamdoc=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!");}}}

JAVA实现zip压缩/解压缩相关推荐

  1. Java原生Zip压缩/解压缩工具类

    转载原文: 写了一个系列,写的很好,强烈推荐去看! Java压缩技术(二) ZIP压缩--Java原生实现 Java压缩技术(三) ZIP解压缩--Java原生实现 Zip压缩/解压缩工具类 缺点: ...

  2. java实现zlib压缩解压缩:文件、byte[]字节数组,数据流

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java实现zlib压缩解压缩. 有关ZLib可参见官方主页 http://www.zlib.net/ ZLib可以简单的理解为压缩/解压缩算法, ...

  3. 利用java进行zip文件解压缩

    利用java进行zip文件解压缩 本文利用Java的zip包中的ZipFile和ZipEntry两个类,获取到压缩包中的所有文件,并将压缩文件通过InputStream写入一个byte数组,再将该by ...

  4. Zip压缩/解压缩工具类

    package com.customcode.util; import java.io.*;import java.util.ArrayList; import java.util.List; imp ...

  5. Java 的zip压缩和解压缩

    Java 的zip压缩和解压缩 好久没有来这写东西了,今天中秋节,有个东西想拿出来分享,一来是工作中遇到的问题,一来是和csdn问候一下,下面就分享一个Java中的zip压缩技术,代码实现比较简单,代 ...

  6. java实现zip压缩文件(同一文件夹下的多个文件夹打成一个zip包)

    这2个工具类都推荐使用统一个场景的不通过写法 推荐第一种 package com.gblfy.test;import java.io.BufferedInputStream; import java. ...

  7. Java建立Zip压缩文件的代码实例

    Java建立Zip压缩文件的代码实例 Java代码 import java.io.*; import java.util.zip.*; class Zip { public static void m ...

  8. Java多线程Zip压缩

    Java多线程Zip压缩 Zip压缩 多线程压缩 线程池 依赖 maven坐标 <dependency><groupId>org.apache.commons</grou ...

  9. zip4j -- Java处理zip压缩文件

    ZIP4J,作为解决了我的问题的终极解决方案,本来一开始在搜索引擎上就看到了它的踪迹,但因天朝的网络环境问题,zip4j的官网一直无法访问,最终使我多走了好多冤枉路,期间试过JDK的zip包,试过Ap ...

最新文章

  1. java开发工具对比eclipse·myeclipse·idea
  2. HTTP详解(1)-工作原理【转】
  3. 黑色星期五c语言,求黑色星期五问题~
  4. JNDI数据库连接池的配置
  5. java五子棋以当前空位为中心 取9个点_java 五子棋有点问题,哪位帮忙破一下、、...
  6. window如何将CMD以管理员身份添加到右键菜单?
  7. HttpPost+json请求---服务器中文乱码及其他
  8. hive的udf,udaf,udtf各自依賴兩種class(转载+分析整理)
  9. Java学习之连接数据库
  10. 面试系列-JVM性能优化相关内容
  11. 在虚拟机中安装Windows XP
  12. 网络实用技术--登录--第三方登录--百度第三方登录
  13. 新人转行IC该怎么选择岗位?(内附各岗位学习视频)
  14. JavaWeb项目搭建准备工作
  15. DKN: Deep Knowledge-Aware Network for News Recommendation阅读笔记
  16. OpenStack常用运维命令手册-V1.0-黑夜青儿
  17. JavaScript之 高性能读书笔记
  18. Java poi之word文本图片内容提取
  19. UI自动化工具——Airtest
  20. spring是如何实现声明式事务的

热门文章

  1. 2023年闷声发大财的6个风口行业
  2. android usb麦克风阵列,语音设备 SDK 麦克风阵列建议
  3. Day07 后台管理与发布文章
  4. Qualcomm 处理器 Krait架构
  5. Kafka 3.1的KRaft模式里的broker与controller
  6. Android隐藏标题栏
  7. mysql:triggers
  8. linux防火墙删除ip白名单命令,利用CentOS系统IPtables防火墙添加网站IP白名单
  9. 游戏开发之Unity学习(五)——鼠标打飞碟(Hit UFO)
  10. 【TED笔记】如何掌控你的自由时间