1 package com.basis.utils; 
 2  
 3 import java.io.BufferedInputStream; 
 4 import java.io.BufferedOutputStream; 
 5 import java.io.File; 
 6 import java.io.FileInputStream; 
 7 import java.io.FileOutputStream; 
 8 import java.util.zip.ZipEntry; 
 9 import java.util.zip.ZipOutputStream; 
10  
11 public class ZipCompress { 
12     private String zipFileName;      // 目的地Zip文件 
13     private String sourceFileName;   //源文件(带压缩的文件或文件夹) 
14      
15     public ZipCompress(String zipFileName,String sourceFileName) 
16     { 
17         this.zipFileName=zipFileName; 
18         this.sourceFileName=sourceFileName; 
19     } 
20      
21     public void zip() throws Exception 
22     { 
23         //File zipFile = new File(zipFileName); 
24         System.out.println("压缩中..."); 
25          
26         //创建zip输出流 
27         ZipOutputStream out = new ZipOutputStream( new FileOutputStream(zipFileName)); 
28          
29         //创建缓冲输出流 
30         BufferedOutputStream bos = new BufferedOutputStream(out); 
31          
32         File sourceFile = new File(sourceFileName); 
33          
34         //调用函数 
35         compress(out,bos,sourceFile,sourceFile.getName()); 
36          
37         bos.close(); 
38         out.close(); 
39         System.out.println("压缩完成"); 
40          
41     } 
42      
43     public void compress(ZipOutputStream out,BufferedOutputStream bos,File sourceFile,String base) throws Exception 
44     { 
45         //如果路径为目录(文件夹) 
46         if(sourceFile.isDirectory()) 
47         { 
48          
49             //取出文件夹中的文件(或子文件夹) 
50             File[] flist = sourceFile.listFiles(); 
51              
52             if(flist.length==0)//如果文件夹为空,则只需在目的地zip文件中写入一个目录进入点 
53             { 
54                 System.out.println(base+"/"); 
55                 out.putNextEntry(  new ZipEntry(base+"/") ); 
56             } 
57             else//如果文件夹不为空,则递归调用compress,文件夹中的每一个文件(或文件夹)进行压缩 
58             { 
59                 for(int i=0;i<flist.length;i++) 
60                 { 
61                     compress(out,bos,flist[i],base+"/"+flist[i].getName()); 
62                 } 
63             } 
64         } 
65         else//如果不是目录(文件夹),即为文件,则先写入目录进入点,之后将文件写入zip文件中 
66         { 
67             out.putNextEntry( new ZipEntry(base) ); 
68             FileInputStream fos = new FileInputStream(sourceFile); 
69             BufferedInputStream bis = new BufferedInputStream(fos); 
70              
71             int tag; 
72             System.out.println(base); 
73             //将源文件写入到zip文件中 
74             while((tag=bis.read())!=-1) 
75             { 
76                 out.write(tag); 
77             } 
78             bis.close(); 
79             fos.close(); 
80              
81         } 
82     } 
83 }

 

发布评论

分享到:

IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

java实现文件目录压缩详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。