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

来源:互联网 发布:程序员很难吗 编辑:程序博客网 时间:2024/05/17 06:43

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

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

   import java.io.*;      import java.util.zip.*;            /**      * 程序实现了ZIP压缩。共分为2部分 : 压缩(compression)与解压(decompression)      * <p>      * 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。     * 需在代码中自定义源输入路径和目标输出路径。      * <p>      * 在本段代码中,实现的是压缩部分;解压部分见本包中Decompression部分。      *       * @author HAN      *       */            public class MyZipCompressing {          private int k = 1; // 定义递归次数变量                public MyZipCompressing() {              // TODO Auto-generated constructor stub          }                /**          * @param args          */          public static void main(String[] args) {              // TODO Auto-generated method stub              MyZipCompressing book = new MyZipCompressing();              try {                  book.zip("C:\\Users\\Gaowen\\Desktop\\ZipTestCompressing.zip",                          new File("C:\\Users\\Gaowen\\Documents\\Tencent Files"));              } catch (Exception e) {                  // TODO Auto-generated catch block                  e.printStackTrace();              }                }                private void zip(String zipFileName, File inputFile) throws Exception {              System.out.println("压缩中...");              ZipOutputStream out = new ZipOutputStream(new FileOutputStream(                      zipFileName));              BufferedOutputStream bo = new BufferedOutputStream(out);              zip(out, inputFile, inputFile.getName(), bo);              bo.close();              out.close(); // 输出流关闭              System.out.println("压缩完成");          }                private void zip(ZipOutputStream out, File f, String base,                  BufferedOutputStream bo) throws Exception { // 方法重载              if (f.isDirectory()) {                  File[] fl = f.listFiles();                  if (fl.length == 0) {                      out.putNextEntry(new ZipEntry(base + "/")); // 创建zip压缩进入点base                      System.out.println(base + "/");                  }                  for (int i = 0; i < fl.length; i++) {                      zip(out, fl[i], base + "/" + fl[i].getName(), bo); // 递归遍历子文件夹                  }                  System.out.println("第" + k + "次递归");                  k++;              } else {                  out.putNextEntry(new ZipEntry(base)); // 创建zip压缩进入点base                  System.out.println(base);                  FileInputStream in = new FileInputStream(f);                  BufferedInputStream bi = new BufferedInputStream(in);                  int b;                  while ((b = bi.read()) != -1) {                      bo.write(b); // 将字节流写入当前zip目录                  }                  bi.close();                  in.close(); // 输入流关闭              }          }      }

import java.io.*;  import java.util.zip.*;  /**  * 程序实现了ZIP压缩。共分为2部分 :  * 压缩(compression)与解压(decompression)  * <p>  * 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。  * 需在代码中自定义源输入路径和目标输出路径。  * <p>  * 在本段代码中,实现的是解压部分;压缩部分见本包中compression部分。  * @author HAN  *  */  public class CopyOfMyzipDecompressing {            public static void main(String[] args) {          // TODO Auto-generated method stub          long startTime=System.currentTimeMillis();          try {              ZipInputStream Zin=new ZipInputStream(new FileInputStream(                      "C:\\Users\\HAN\\Desktop\\stock\\SpectreCompressed.zip"));//输入源zip路径              BufferedInputStream Bin=new BufferedInputStream(Zin);              String Parent="C:\\Users\\HAN\\Desktop"; //输出路径(文件夹目录)              File Fout=null;              ZipEntry entry;              try {                  while((entry = Zin.getNextEntry())!=null && !entry.isDirectory()){                      Fout=new File(Parent,entry.getName());                      if(!Fout.exists()){                          (new File(Fout.getParent())).mkdirs();                      }                      FileOutputStream out=new FileOutputStream(Fout);                      BufferedOutputStream Bout=new BufferedOutputStream(out);                      int b;                      while((b=Bin.read())!=-1){                          Bout.write(b);                      }                      Bout.close();                      out.close();                      System.out.println(Fout+"解压成功");                      }                  Bin.close();                  Zin.close();              } catch (IOException e) {                  // TODO Auto-generated catch block                  e.printStackTrace();              }          } catch (FileNotFoundException e) {              // TODO Auto-generated catch block              e.printStackTrace();          }          long endTime=System.currentTimeMillis();          System.out.println("耗费时间: "+(endTime-startTime)+" ms");      }    }

0 0