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 }

 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/7953.html

(0)
上一篇 2021年7月18日
下一篇 2021年7月18日

相关推荐

发表回复

登录后才能评论