java提供的壓縮方法壓縮文件夾(可以包含多個子文件夾)


 1     /**
 2      * 該方法遞歸實現將多個文件夾壓縮在同一個zip包中 然后刪除文件夾directoryName 下需要被壓縮的文件。
 3      * @param directoryName 文件夾路徑
 4      * @param zos           壓縮流 ZipOutputStream 確定壓縮包生成的位置
 5      * @param basePath      用於傳給 ZipEntry 用於壓縮包分文件夾第一級傳入可以為""
 6      * @throws IOException
 7      */
 8     public static void zipDir(String directoryName, ZipOutputStream zos, String basePath) {
 9         File file = new File(directoryName);
10         // 每一級別的遞歸 basePath 不應該被改變所以添加一個 參數 copyBasePath
11         String copyBasePath ="";
12         if (file.exists()) {
13             File[] fileList = file.listFiles();
14             for (File f : fileList) {
15                 if (f.isDirectory()) {
16                     // 拼接文件夾目錄
17                     if (!"".equals(basePath)) {
18                         copyBasePath = basePath+File.separator+f.getName();
19                     } else {
20                         copyBasePath = f.getName();
21                     }
22                     // 繼續遞歸文件夾
23                     zipDir(directoryName + File.separator + f.getName(), zos, copyBasePath);
24                 } else {
25                     // 壓縮單個文件到 zos
26                     String zipName;
27                     if (!"".equals(basePath)) {
28                         zipName = basePath + File.separator + f.getName();
29                     } else {
30                         zipName = f.getName();
31                     }
32                     try {
33                         // zos.putNextEntry  開始添加壓縮文件  ZipEntry傳入的參數 zipName如果包含了層級關系就會生成文件夾
34                         zos.putNextEntry(new ZipEntry(zipName));
35                         int len;
36                         FileInputStream is = new FileInputStream(f);
37                         byte[] bytes = new byte[1024];
38                         while ((len = is.read(bytes)) != -1) {
39                             zos.write(bytes, 0, len);
40                         }
41                         zos.flush();
42                         // zos.closeEntry()   結束當前壓縮文件的添加
43                         zos.closeEntry();
44                         is.close();
45                     } catch (FileNotFoundException e) {
46                         e.printStackTrace();
47                     } catch (IOException e) {
48                         e.printStackTrace();
49                     }
50                 }
51                 Boolean isDelete = f.delete();
52                 System.out.println(f.getName()+"刪除是否成功: "+isDelete);
53             }
54         }
55     }

 


免責聲明!

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



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