java按照目录结构压缩文件夹以及文件夹内内容

java按照目录结构压缩文件夹以及文件夹内内容

复制代码

 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 
 

你可能感兴趣的:(java按照目录结构压缩文件夹以及文件夹内内容)