Java ZIP压缩文件使用总结

做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 exception
101  
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

posted @ 2018-08-03 11:41  huohuohiahia  阅读(203)  评论(0编辑  收藏  举报