JAVA实现zip压缩/解压缩
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压缩/解压缩相关推荐
- Java原生Zip压缩/解压缩工具类
转载原文: 写了一个系列,写的很好,强烈推荐去看! Java压缩技术(二) ZIP压缩--Java原生实现 Java压缩技术(三) ZIP解压缩--Java原生实现 Zip压缩/解压缩工具类 缺点: ...
- java实现zlib压缩解压缩:文件、byte[]字节数组,数据流
全栈工程师开发手册 (作者:栾鹏) java教程全解 java实现zlib压缩解压缩. 有关ZLib可参见官方主页 http://www.zlib.net/ ZLib可以简单的理解为压缩/解压缩算法, ...
- 利用java进行zip文件解压缩
利用java进行zip文件解压缩 本文利用Java的zip包中的ZipFile和ZipEntry两个类,获取到压缩包中的所有文件,并将压缩文件通过InputStream写入一个byte数组,再将该by ...
- Zip压缩/解压缩工具类
package com.customcode.util; import java.io.*;import java.util.ArrayList; import java.util.List; imp ...
- Java 的zip压缩和解压缩
Java 的zip压缩和解压缩 好久没有来这写东西了,今天中秋节,有个东西想拿出来分享,一来是工作中遇到的问题,一来是和csdn问候一下,下面就分享一个Java中的zip压缩技术,代码实现比较简单,代 ...
- java实现zip压缩文件(同一文件夹下的多个文件夹打成一个zip包)
这2个工具类都推荐使用统一个场景的不通过写法 推荐第一种 package com.gblfy.test;import java.io.BufferedInputStream; import java. ...
- Java建立Zip压缩文件的代码实例
Java建立Zip压缩文件的代码实例 Java代码 import java.io.*; import java.util.zip.*; class Zip { public static void m ...
- Java多线程Zip压缩
Java多线程Zip压缩 Zip压缩 多线程压缩 线程池 依赖 maven坐标 <dependency><groupId>org.apache.commons</grou ...
- zip4j -- Java处理zip压缩文件
ZIP4J,作为解决了我的问题的终极解决方案,本来一开始在搜索引擎上就看到了它的踪迹,但因天朝的网络环境问题,zip4j的官网一直无法访问,最终使我多走了好多冤枉路,期间试过JDK的zip包,试过Ap ...
最新文章
- java开发工具对比eclipse·myeclipse·idea
- HTTP详解(1)-工作原理【转】
- 黑色星期五c语言,求黑色星期五问题~
- JNDI数据库连接池的配置
- java五子棋以当前空位为中心 取9个点_java 五子棋有点问题,哪位帮忙破一下、、...
- window如何将CMD以管理员身份添加到右键菜单?
- HttpPost+json请求---服务器中文乱码及其他
- hive的udf,udaf,udtf各自依賴兩種class(转载+分析整理)
- Java学习之连接数据库
- 面试系列-JVM性能优化相关内容
- 在虚拟机中安装Windows XP
- 网络实用技术--登录--第三方登录--百度第三方登录
- 新人转行IC该怎么选择岗位?(内附各岗位学习视频)
- JavaWeb项目搭建准备工作
- DKN: Deep Knowledge-Aware Network for News Recommendation阅读笔记
- OpenStack常用运维命令手册-V1.0-黑夜青儿
- JavaScript之 高性能读书笔记
- Java poi之word文本图片内容提取
- UI自动化工具——Airtest
- spring是如何实现声明式事务的