JAVA对数据进行压缩和解压

来源:互联网 发布:中国网络运营商有几家 编辑:程序博客网 时间:2024/05/29 02:12

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

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

package com.han;  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(); // 输入流关闭          }      }  }  
package com.han;  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");      }  }  
原创粉丝点击