博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java ZIP压缩文件使用总结
阅读量:5075 次
发布时间:2019-06-12

本文共 4305 字,大约阅读时间需要 14 分钟。

做Java Web开发,有时候遇到将多个文件或者文件夹压缩成一个.zip文件,供前端下载。Java的JDK中提供一个java.util.zip的接口,供大家使用。如下图:

图上就是Java 的JDK提供的接口,但是压缩文件或者文件夹的时候,怎么使用上面的接口呢?下面我给出几个相关的接口,这些接口是下面压缩文件或者文件夹过程中使用到的。

java.util.zip.ZipEntry;java.util.zip.ZipOutputStream;

下面的压缩过程主要是通过这两个接口压缩文件或者文件夹;

下面先给出源码,后面详细介绍的接口中的方法:

1 package ZIPUtil;  2    3 import java.io.BufferedInputStream;  4 import java.io.File;  5 import java.io.FileInputStream;  6 import java.io.FileOutputStream;  7 import java.io.IOException;  8 import java.util.zip.CRC32;  9 import java.util.zip.CheckedOutputStream; 10 import java.util.zip.ZipEntry; 11 import java.util.zip.ZipOutputStream; 12   13 /** 14  * 学习使用java.util.zip压缩文件或者文件夹 15  * @author lhm 16  * 17  */ 18   19 public class ZIPUtil { 20   21     /** 22      * @param args 主方法 23      */ 24     public static void main(String[] args) { 25         // TODO Auto-generated method stub 26         //第一个参数是需要压缩的源路径;第二个参数是压缩文件的目的路径,这边需要将压缩的文件名字加上去 27         compress("H:\\zip/scala","H:\\zip/oo.zip"); 28     } 29   30     /**s 31      * 压缩文件 32      * @param srcFilePath 压缩源路径 33      * @param destFilePath 压缩目的路径 34      */ 35     public static void compress(String srcFilePath, String destFilePath) { 36         // 37         File src = new File(srcFilePath); 38   39         if (!src.exists()) { 40             throw new RuntimeException(srcFilePath + "不存在"); 41         } 42         File zipFile = new File(destFilePath); 43   44         try { 45   46             FileOutputStream fos = new FileOutputStream(zipFile); 47             ZipOutputStream zos = new ZipOutputStream(fos); 48             String baseDir = ""; 49             compressbyType(src, zos, baseDir); 50             zos.close(); 51   52         } catch (Exception e) { 53             // TODO Auto-generated catch block 54             e.printStackTrace(); 55   56         } 57     } 58     /** 59      * 按照原路径的类型就行压缩。文件路径直接把文件压缩, 60      * @param src 61      * @param zos 62      * @param baseDir 63      */ 64      private static void compressbyType(File src, ZipOutputStream zos,String baseDir) { 65   66             if (!src.exists()) 67                 return; 68             System.out.println("压缩路径" + baseDir + src.getName()); 69             //判断文件是否是文件,如果是文件调用compressFile方法,如果是路径,则调用compressDir方法; 70             if (src.isFile()) { 71                 //src是文件,调用此方法 72                 compressFile(src, zos, baseDir); 73                   74             } else if (src.isDirectory()) { 75                 //src是文件夹,调用此方法 76                 compressDir(src, zos, baseDir); 77   78             } 79   80         } 81        82         /** 83          * 压缩文件 84         */ 85         private static void compressFile(File file, ZipOutputStream zos,String baseDir) { 86             if (!file.exists()) 87                 return; 88             try { 89                 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); 90                 ZipEntry entry = new ZipEntry(baseDir + file.getName()); 91                 zos.putNextEntry(entry); 92                 int count; 93                 byte[] buf = new byte[1024]; 94                 while ((count = bis.read(buf)) != -1) { 95                     zos.write(buf, 0, count); 96                 } 97                 bis.close(); 98   99             } catch (Exception e) {100               // TODO: handle exception101  102             }103         }104          105         /**106          * 压缩文件夹107          */108         private static void compressDir(File dir, ZipOutputStream zos,String baseDir) {109             if (!dir.exists())110                 return;111             File[] files = dir.listFiles();112             if(files.length == 0){113                 try {114                     zos.putNextEntry(new ZipEntry(baseDir + dir.getName()+File.separator));115                 } catch (IOException e) {116                     e.printStackTrace();117                 }118             }119             for (File file : files) {120                 compressbyType(file, zos, baseDir + dir.getName() + File.separator);121             }122     }123 }

先将文件加载到文件流FileInputStream中,再将文件流输入到ZipOutputStream;

源文件路径:H:\\zip/scala,目的压缩文件zip的路径:H:\\zip/oo.zip

文章转自:https://www.cnblogs.com/lihaiming93/p/8098255.html

转载于:https://www.cnblogs.com/walblog/articles/9413238.html

你可能感兴趣的文章