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<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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM