用java代码实现文件的zip压缩与解压

    xiaoxiao2021-04-12  28

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

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

    [java] view plain copy 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目录               }      bo.flush();              bi.close();               in.close(); // 输入流关闭           }       }   }  

     

    //递归解压文件夹下zip文件 public class CopyOfMyzipDecompressing {              public static void main(String[] args) {         try { ArrayList<String> listll = getFiles("C:\\D\\adc"); for (String name : listll) { // TODO Auto-generated method stub long startTime = System.currentTimeMillis(); ZipInputStream Zin = new ZipInputStream(new FileInputStream( name), Charset.forName("GBK"));//输入源zip路径 BufferedInputStream Bin = new BufferedInputStream(Zin); String Parent = "C:\\D\\adcd"; //输出路径(文件夹目录) File Fout = null; ZipEntry entry; while (Zin.getNextEntry() !=null && (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(); long endTime = System.currentTimeMillis(); System.out.println("耗费时间: " + (endTime - startTime) + " ms"); } }catch (Exception e) { e.printStackTrace(); }    }  //查询文件夹下文件的路径 public static ArrayList<String> getFiles(String path) { ArrayList<String> files = new ArrayList<String>(); File file = new File(path); File[] tempList = file.listFiles(); for (int i = 0; i < tempList.length; i++) { if (tempList[i].isFile()) { // System.out.println("文 件:" + tempList[i]); files.add(tempList[i].toString()); } if (tempList[i].isDirectory()) { // System.out.println("文件夹:" + tempList[i]); } } return files; }

     

    转载请注明原文地址: https://ju.6miu.com/read-667975.html

    最新回复(0)