1 /**
2 * @param source 待压缩文件/文件夹路径
3 * @param destination 压缩后压缩文件路径
4 * @return 压缩多个文件夹
5 */
6 public static boolean toZip(String source, String destination) {
7 try {
8 FileOutputStream out = new FileOutputStream(destination);
9 ZipOutputStream zipOutputStream = new ZipOutputStream(out);
10 File sourceFile = new File(source);
11
12 // 递归压缩文件夹
13 compress(sourceFile, zipOutputStream, sourceFile.getName());
14
15 zipOutputStream.flush();
16 zipOutputStream.close();
17 } catch (IOException e) {
18 System.out.println("failed to zip compress, exception");
19 return false;
20 }
21 return true;
22 }
23
24 private static void compress(File sourceFile, ZipOutputStream zos, String name) throws IOException {
25 byte[] buf = new byte[1024];
26 if(sourceFile.isFile()){
27 // 压缩单个文件,压缩后文件名为当前文件名
28 zos.putNextEntry(new ZipEntry(name));
29 // copy文件到zip输出流中
30 int len;
31 FileInputStream in = new FileInputStream(sourceFile);
32 while ((len = in.read(buf)) != -1){
33 zos.write(buf, 0, len);
34 }
35 zos.closeEntry();
36 in.close();
37 } else {
38 File[] listFiles = sourceFile.listFiles();
39 if(listFiles == null || listFiles.length == 0){
40 // 空文件夹的处理(创建一个空ZipEntry)
41 zos.putNextEntry(new ZipEntry(name + "/"));
42 zos.closeEntry();
43 }else {
44 // 递归压缩文件夹下的文件
45 for (File file : listFiles) {
46 compress(file, zos, name + "/" + file.getName());
47 }
48 }
49 }
50 }