Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 449|回复: 0

[Java基础知识]利用Java实现zip压缩解压缩

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-1 00:48:00 | 显示全部楼层 |阅读模式
    由于网络带宽有限,所以数据文件的压缩有利于数据在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.LOAD);  

        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: "+doczipsize);  
       }  

      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!");  
       }  

      }  
    }   

      
      
       
       

         
       

         
       
      

       

      



                            function TempSave(ElementID)
                            {
                                    CommentsPersistDiv.setAttribute("CommentContent",document.getElementById(ElementID).value);
                                    CommentsPersistDiv.save("CommentXMLStore");
                            }
                            function Restore(ElementID)
                            {
                                    CommentsPersistDiv.load("CommentXMLStore");
                                    document.getElementById(ElementID).value=CommentsPersistDiv.getAttribute("CommentContent");
                            }
                   
                      











    源码下载:http://file.javaxxz.com/2014/10/1/004759234.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-11 05:33 , Processed in 0.392667 second(s), 47 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表