Java 解压zip压缩包

因为最近项目需要批量上传文件,而这里的批量就是将文件压缩在了一个zip包里,然后读取文件进行解析文件里的内容。

因此需要先对上传的zip包进行解压。以下直接提供代码供参考:

1.第一个方法是用于解压zip压缩包的方法。

2.第二个方法是 删除该文件夹以及子目录和子目录文件的方法。

3.第三个方法是 删除 删除文件夹内所有文件和子目录 的方法。

因为我们一般处理解析完数据之后需要删除上传的文件,以减小服务器的压力,所以提供第二、三方法以供参考。

我这里的解压zip包的方法返回的是解压后所得到的文件List,大家也可以根据需要返回自己需要的结果,或者不返回都行。

如果大家有什么更好的方法欢迎留言,请各位多多指教!

  1 package com.forms.oa.weekreport.batchimport.service;
  2 
  3 import java.io.File;
  4 import java.io.FileOutputStream;
  5 import java.io.IOException;
  6 import java.io.InputStream;
  7 import java.util.ArrayList;
  8 import java.util.Enumeration;
  9 import java.util.List;
 10 
 11 import org.apache.tools.zip.ZipEntry;
 12 import org.apache.tools.zip.ZipFile;
 13 
 14 public class FileUtil {
 15     
 16     /**
 17      * 解压zip压缩包并返回解压之后所得到的文件List
 18      *  <br>
 19      * @param zipPath
 20      * @return
 21      * List<File>
 22      */
 23     public static List<File> UnZipFile(String zipPath) {
 24         File file = new File(zipPath);
 25         //设置 压缩包所在的目录下与压缩包同名文件夹 为 解压后的文件所在的目录 
 26         String unZipPath=zipPath.substring(0, zipPath.lastIndexOf("."));   
 27         ZipFile zipFile = null;
 28         List<File> fileList=new ArrayList<File>();
 29         try {
 30             //设置编码格式
 31             zipFile = new ZipFile(file,"GBK");
 32         } catch (IOException e1) {
 33             e1.printStackTrace();
 34         }
 35         Enumeration e = zipFile.getEntries(); 
 36         while(e.hasMoreElements()) { 
 37             ZipEntry zipEntry = (ZipEntry)e.nextElement(); 
 38             if(zipEntry.isDirectory()) { 
 39                 String name = zipEntry.getName(); 
 40                 name = name.substring(0,name.length()-1); 
 41                 File f = new File(unZipPath+File.separator + name); 
 42                 f.mkdirs(); 
 43             } else { 
 44                 File f = new File(unZipPath +File.separator+ zipEntry.getName()); 
 45                 fileList.add(f);
 46                 f.getParentFile().mkdirs(); 
 47                 try {
 48                     f.createNewFile();
 49                     InputStream is = zipFile.getInputStream(zipEntry); 
 50                     FileOutputStream fos = new FileOutputStream(f); 
 51                     int length = 0; 
 52                     byte[] b = new byte[1024]; 
 53                     while((length=is.read(b, 0, 1024))!=-1) { 
 54                         fos.write(b, 0, length); 
 55                     } 
 56                     is.close(); 
 57                     fos.close(); 
 58                 } catch (IOException e1) {
 59                     e1.printStackTrace();
 60                 } 
 61             } 
 62         } 
 63         if (zipFile != null) { 
 64             try {
 65                 zipFile.close();
 66             } catch (IOException e1) {
 67                 e1.printStackTrace();
 68             } 
 69         } 
 70         file.delete();//解压完以后将压缩包删除
 71         return fileList;  //返回解压后所得到的文件list
 72     }
 73     
 74     /**
 75      * 删除该文件夹以及子目录和子目录文件 <br>
 76      * @param folderPath void
 77      */
 78     public static void delFolder(String folderPath) {
 79         try {
 80             delAllFile(folderPath); //删除完里面所有内容  
 81             File path = new File(folderPath);
 82             path.delete(); //删除空文件夹  
 83         } catch (Exception e) {
 84             e.printStackTrace();
 85         }
 86     }
 87 
 88     /**
 89      * 删除文件夹内所有文件和子目录 <br>
 90      * @param path
 91      * @return boolean
 92      */
 93     public static boolean delAllFile(String path) {
 94         boolean flag = false;
 95         File file = new File(path);
 96         if (!file.exists()) {
 97             return flag;
 98         }
 99         if (!file.isDirectory()) {
100             return flag;
101         }
102         String[] tempList = file.list();
103         File temp = null;
104         for (int i = 0; i < tempList.length; i++) {
105             if (path.endsWith(File.separator)) {
106                 temp = new File(path + tempList[i]);
107             } else {
108                 temp = new File(path + File.separator + tempList[i]);
109             }
110             if (temp.isFile()) {
111                 temp.delete();
112             }
113             if (temp.isDirectory()) {
114                 delAllFile(path + File.separator + tempList[i]);//先删除文件夹里面的文件  
115                 delFolder(path + File.separator + tempList[i]);//再删除空文件夹  
116                 flag = true;
117             }
118         }
119         return flag;
120     }
121 
122 
123 }

 

posted @ 2018-02-07 15:29  dengyongchang  阅读(990)  评论(0编辑  收藏  举报