zoukankan      html  css  js  c++  java
  • java实现 zip解压缩

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

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

    1.    package com.han;  
    2.      
    3.    import java.io.*;  
    4.    import java.util.zip.*;  
    5.      
    6.    /** 
    7.     * 程序实现了ZIP压缩。共分为2部分 : 压缩(compression)与解压(decompression) 
    8.     * <p> 
    9.     * 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。 需在代码中自定义源输入路径和目标输出路径。 
    10.     * <p> 
    11.     * 在本段代码中,实现的是压缩部分;解压部分见本包中Decompression部分。 
    12.     *  
    13.     * @author HAN 
    14.     *  
    15.     */  
    16.      
    17.    public class MyZipCompressing {  
    18.        private int k = 1; // 定义递归次数变量  
    19.      
    20.        public MyZipCompressing() {  
    21.            // TODO Auto-generated constructor stub  
    22.        }  
    23.      
    24.        /** 
    25.         * @param args 
    26.         */  
    27.        public static void main(String[] args) {  
    28.            // TODO Auto-generated method stub  
    29.            MyZipCompressing book = new MyZipCompressing();  
    30.            try {  
    31.                book.zip("C:\Users\Gaowen\Desktop\ZipTestCompressing.zip",  
    32.                        new File("C:\Users\Gaowen\Documents\Tencent Files"));  
    33.            } catch (Exception e) {  
    34.                // TODO Auto-generated catch block  
    35.                e.printStackTrace();  
    36.            }  
    37.      
    38.        }  
    39.      
    40.        private void zip(String zipFileName, File inputFile) throws Exception {  
    41.            System.out.println("压缩中...");  
    42.            ZipOutputStream out = new ZipOutputStream(new FileOutputStream(  
    43.                    zipFileName));  
    44.            BufferedOutputStream bo = new BufferedOutputStream(out);  
    45.            zip(out, inputFile, inputFile.getName(), bo);  
    46.            bo.close();  
    47.            out.close(); // 输出流关闭  
    48.            System.out.println("压缩完成");  
    49.        }  
    50.      
    51.        private void zip(ZipOutputStream out, File f, String base,  
    52.                BufferedOutputStream bo) throws Exception { // 方法重载  
    53.            if (f.isDirectory()) {  
    54.                File[] fl = f.listFiles();  
    55.                if (fl.length == 0) {  
    56.                    out.putNextEntry(new ZipEntry(base + "/")); // 创建zip压缩进入点base  
    57.                    System.out.println(base + "/");  
    58.                }  
    59.                for (int i = 0; i < fl.length; i++) {  
    60.                    zip(out, fl[i], base + "/" + fl[i].getName(), bo); // 递归遍历子文件夹  
    61.                }  
    62.                System.out.println("第" + k + "次递归");  
    63.                k++;  
    64.            } else {  
    65.                out.putNextEntry(new ZipEntry(base)); // 创建zip压缩进入点base  
    66.                System.out.println(base);  
    67.                FileInputStream in = new FileInputStream(f);  
    68.                BufferedInputStream bi = new BufferedInputStream(in);  
    69.                int b;  
    70.                while ((b = bi.read()) != -1) {  
    71.                    bo.write(b); // 将字节流写入当前zip目录  
    72.                }  
    73.                bi.close();  
    74.                in.close(); // 输入流关闭  
    75.            }  
    76.        }  
    77.    }  
    1.    package com.han;  
    2.      
    3.    import java.io.*;  
    4.    import java.util.zip.*;  
    5.    /** 
    6.     * 程序实现了ZIP压缩。共分为2部分 : 
    7.     * 压缩(compression)与解压(decompression) 
    8.     * <p> 
    9.     * 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。 
    10.     * 需在代码中自定义源输入路径和目标输出路径。 
    11.     * <p> 
    12.     * 在本段代码中,实现的是解压部分;压缩部分见本包中compression部分。 
    13.     * @author HAN 
    14.     * 
    15.     */  
    16.    public class CopyOfMyzipDecompressing {  
    17.          
    18.        public static void main(String[] args) {  
    19.            // TODO Auto-generated method stub  
    20.            long startTime=System.currentTimeMillis();  
    21.            try {  
    22.                ZipInputStream Zin=new ZipInputStream(new FileInputStream(  
    23.                        "C:\Users\HAN\Desktop\stock\SpectreCompressed.zip"));//输入源zip路径  
    24.                BufferedInputStream Bin=new BufferedInputStream(Zin);  
    25.                String Parent="C:\Users\HAN\Desktop"; //输出路径(文件夹目录)  
    26.                File Fout=null;  
    27.                ZipEntry entry;  
    28.                try {  
    29.                    while((entry = Zin.getNextEntry())!=null && !entry.isDirectory()){  
    30.                        Fout=new File(Parent,entry.getName());  
    31.                        if(!Fout.exists()){  
    32.                            (new File(Fout.getParent())).mkdirs();  
    33.                        }  
    34.                        FileOutputStream out=new FileOutputStream(Fout);  
    35.                        BufferedOutputStream Bout=new BufferedOutputStream(out);  
    36.                        int b;  
    37.                        while((b=Bin.read())!=-1){  
    38.                            Bout.write(b);  
    39.                        }  
    40.                        Bout.close();  
    41.                        out.close();  
    42.                        System.out.println(Fout+"解压成功");      
    43.                    }  
    44.                    Bin.close();  
    45.                    Zin.close();  
    46.                } catch (IOException e) {  
    47.                    // TODO Auto-generated catch block  
    48.                    e.printStackTrace();  
    49.                }  
    50.            } catch (FileNotFoundException e) {  
    51.                // TODO Auto-generated catch block  
    52.                e.printStackTrace();  
    53.            }  
    54.            long endTime=System.currentTimeMillis();  
    55.            System.out.println("耗费时间: "+(endTime-startTime)+" ms");  
    56.        }  
    57.      
    58.    }  
  • 相关阅读:
    Oracle11g新建用户及用户表空间
    PLSQL连接oracle12c
    Zabbix微信报警脚本及写触发记录
    使用document.select(Jquery Css selector) selector:看jsoup文档来敲案例学习 selector选择器
    仙女打卡day1
    XML的解析(读取),附带源码与运行效果图 (day01)
    [Luogu] P7077 函数调用
    [Luogu] P5815 [CQOI2010]扑克牌
    [Luogu] CF364D Ghd
    [Luogu] P4823 [TJOI2013]拯救小矮人
  • 原文地址:https://www.cnblogs.com/wangxuemei/p/8360800.html
Copyright © 2011-2022 走看看