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.    }  
原文地址:https://www.cnblogs.com/wangxuemei/p/8360800.html