JAVA实现实用的ZIP压缩与解压

来源:互联网 发布:数据抽样方法 编辑:程序博客网 时间:2024/05/16 15:57

程序实现了ZIP压缩。共分为2部分 : 压缩(compression)与解压(decompression)

大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。 需在代码中自定义源输入路径和目标输出路径。

[java] view plaincopy

  1. package com.han;
  2. import java.io.*;
  3. import java.util.zip.*;
  4. /**
  5.  * 程序实现了ZIP压缩。共分为2部分 :
  6.  * 压缩(compression)与解压(decompression)
  7.  * <p>
  8.  * 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。
  9.  * 需在代码中自定义源输入路径和目标输出路径。
  10.  * <p>
  11.  * 在本段代码中,实现的是压缩部分;解压部分见本包中decompression部分。
  12.  * @author HAN
  13.  *
  14.  */
  15. public class CopyOfMyZipCompressing {
  16.     private int k=1;   //定义递归次数变量
  17.     public CopyOfMyZipCompressing() {
  18.         // TODO Auto-generated constructor stub
  19.     }
  20.     public static void main(String[] args) {
  21.         // TODO Auto-generated method stub
  22.         long startTime=System.currentTimeMillis();
  23.         CopyOfMyZipCompressing book=new CopyOfMyZipCompressing();
  24.         try {
  25.             book.zip(“C:\\Users\\HAN\\Desktop\\stock\\SpectreCompressed.zip”, //自定义的zip输出路径
  26.                     new File(“C:\\Users\\HAN\\Desktop\\CombinedSpectres.txt”)); //自定义的源输入路径,即要压缩的文件或文件夹
  27.         } catch (Exception e) {
  28.             // TODO Auto-generated catch block
  29.             e.printStackTrace();
  30.         }
  31.         long endTime=System.currentTimeMillis();
  32.         System.out.println(“耗费时间: “+(endTime-startTime)+” ms”);
  33.     }
  34.     private void zip(String zipFileName, File inputFile) throws Exception{
  35.         System.out.println(“压缩中…”);
  36.         ZipOutputStream out=new ZipOutputStream(new FileOutputStream(zipFileName));
  37.         BufferedOutputStream bo=new BufferedOutputStream(out);
  38.         zip(out,inputFile, “/”+inputFile.getName(),bo);
  39.         bo.close();
  40.         out.close();  //输出流关闭
  41.         System.out.println(“压缩完成”);
  42.     }
  43.     private void zip(ZipOutputStream out, File f, String base, BufferedOutputStream bo)
  44.     throws Exception{ //方法重载
  45.         if (f.isDirectory()){
  46.             File[] fl=f.listFiles();
  47.             for(int i=0;i<fl.length;i++){
  48.                 zip(out, fl[i],base+”/”+fl[i].getName(),bo);    //递归遍历子文件夹
  49.             }
  50.             System.out.println(“第”+k+”次递归”);
  51.             k++;
  52.         }else{
  53.             out.putNextEntry(new ZipEntry(base)); // 创建zip压缩进入点base
  54.             System.out.println(base);
  55.             FileInputStream in=new FileInputStream(f);
  56.             BufferedInputStream bi=new BufferedInputStream(in);
  57.             int b;
  58.             while((b=bi.read())!=-1){
  59.                 bo.write(b); //将字节流写入当前zip目录
  60.             }
  61.             bi.close();
  62.             in.close(); //输入流关闭
  63.         }
  64.     }
  65. }

 

[java] view plaincopy

  1. package com.han;
  2. import java.io.*;
  3. import java.util.zip.*;
  4. /**
  5.  * 程序实现了ZIP压缩。共分为2部分 :
  6.  * 压缩(compression)与解压(decompression)
  7.  * <p>
  8.  * 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。
  9.  * 需在代码中自定义源输入路径和目标输出路径。
  10.  * <p>
  11.  * 在本段代码中,实现的是解压部分;压缩部分见本包中compression部分。
  12.  * @author HAN
  13.  *
  14.  */
  15. public class CopyOfMyzipDecompressing {
  16.     public static void main(String[] args) {
  17.         // TODO Auto-generated method stub
  18.         long startTime=System.currentTimeMillis();
  19.         try {
  20.             ZipInputStream Zin=new ZipInputStream(new FileInputStream(
  21.                     “C:\\Users\\HAN\\Desktop\\stock\\SpectreCompressed.zip”));//输入源zip路径
  22.             BufferedInputStream Bin=new BufferedInputStream(Zin);
  23.             String Parent=”C:\\Users\\HAN\\Desktop”; //输出路径(文件夹目录)
  24.             File Fout=null;
  25.             ZipEntry entry;
  26.             try {
  27.                 while((entry = Zin.getNextEntry())!=null && !entry.isDirectory()){
  28.                     Fout=new File(Parent,entry.getName());
  29.                     if(!Fout.exists()){
  30.                         (new File(Fout.getParent())).mkdirs();
  31.                     }
  32.                     FileOutputStream out=new FileOutputStream(Fout);
  33.                     BufferedOutputStream Bout=new BufferedOutputStream(out);
  34.                     int b;
  35.                     while((b=Bin.read())!=-1){
  36.                         Bout.write(b);
  37.                     }
  38.                     Bout.close();
  39.                     out.close();
  40.                     System.out.println(Fout+”解压成功”);
  41.                 }
  42.                 Bin.close();
  43.                 Zin.close();
  44.             } catch (IOException e) {
  45.                 // TODO Auto-generated catch block
  46.                 e.printStackTrace();
  47.             }
  48.         } catch (FileNotFoundException e) {
  49.             // TODO Auto-generated catch block
  50.             e.printStackTrace();
  51.         }
  52.         long endTime=System.currentTimeMillis();
  53.         System.out.println(“耗费时间: “+(endTime-startTime)+” ms”);
  54.     }
  55. }
原创粉丝点击