Java 解压zip压缩包

Wesley13
• 阅读 850

因为最近项目需要批量上传文件,而这里的批量就是将文件压缩在了一个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 }
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java向python ,text文件动态传参或传值问题完美解决
由于业务需要对python文件进行参数传递,通过下面两个java方法完美解决此问题,我的思路是:首先我要先把上次写的参数删除,第二我要新的参数写到python文件中。第一个方法解决了删除上次传递的参数问题。第二个方法解决了参数传递到python文件/@paramfilepython文件的路径
红烧土豆泥 红烧土豆泥
3年前
Java的文件解压-Zip格式
language/作者认为解压缩最安全的方法先创建所有的文件夹之后创建再文件<p原因:未处理好当压缩文件夹下第一个是一个文件夹,考虑到存在有文件可以没有(.)等这些标识符,无法识别出是否是文件夹还是文件,故根据zipEntry.getName后续返回值是否存在后续文件夹即(\\符号)判断是否其是文件夹,进而可以创建出压缩包下所有的
Peter20 Peter20
3年前
mysql基础入门_thankszmy的博客
一、MYSQL安装下载完后,我们将zip包解压到相应的目录,这里我将解压后的文件夹放在C:\\web\\mysql8.0.15winx64下。打开刚刚解压的文件夹C:\\web\\mysql8.0.15winx64,在该文件夹下创建my.ini配置文件,编辑my.ini配置以下基本信息:mysql设置mysql客户端默认字符集
Stella981 Stella981
3年前
AndroidStudio Gradle手动下载和安装
操作流程概述:下载好的压缩包和解压后的文件夹复制到gradle5.5.1all97z1ksx6lirer3kbvdnh7jtjg文件夹下,将gradle5.5.1all.zip.part文件删除,复制一份gradle5.5.1all.zip.lck文件,重命名为gradle5.5.1all.zip.ok,重启An
Stella981 Stella981
3年前
Linux下创建加密的压缩文件
Linux下创建加密的压缩文件方法一:1.使用ZIP命令创建一个加密的ZIP文件:2.解压缩加密文件时,会提示要求输入密码:方法二:1.使用7z创建一个zip文件:2.解压缩加密文件:3.使用限制方法三:1.Tocre
Wesley13 Wesley13
3年前
OAI搭建总结
我是参考网上的方法:oai搭建之eNB的文章,接下来就根据自身所遇到的问题再这里总结一下步骤:一、再官网上下载oai的文件openairinterface5gmaster.zip二、编译的过程可以参考:oai搭建之eNB的文章  a、解压openairinterface5gmaster.zip,解压后进入该文件夹,  执行:sourc
Wesley13 Wesley13
3年前
JAVA 实现将多目录多层级文件打成ZIP包后保留层级目录下载 ZIP压缩 下载
将文件夹保留目录打包为ZIP压缩包并下载上周做了一个需求,要求将数据库保存的html界面取出后将服务器下的css和js文件一起打包压缩为ZIP文件,返回给前台;在数据库中保存的是html标签,查出后,我把这些内容写入css和js等其他文件所在目录的一个文件内,然后将这整个文件夹压缩打包下载,
Stella981 Stella981
3年前
Cocos Creator导出场景和预制的问题
CocosCreator支持导出当前项目中的场景和预制为另一个项目所用:1,选择要导出的场景或者预制;2,选择要导出到的目标文件夹位置并进行可能的重新命名;3,导出一个压缩文件.zip。4,解压压缩文件.zip,然后可以拖动其中的内容到目标项目指定位置进行使用即可。但是也有一些小问题:1,
燕青 燕青
1年前
苹果专用压缩解压工具:BetterZip 5中文注册激活版 附 激活码
是一款Mac操作系统上的压缩和解压缩工具,它可以帮助用户创建、打开、浏览和提取各种不同类型的压缩文件。使用BetterZip,您可以通过简单的拖放动作将文件添加到压缩包中,并选择不同的压缩格式(如zip、tar、7zip、rar等)。此外,BetterZi
小万哥 小万哥
9个月前
Java 文件处理完全指南:创建、读取、写入和删除文件详细解析
Java文件操作文件处理简介文件处理是任何应用程序的重要部分。Java提供了许多用于创建、读取、更新和删除文件的方法。Java文件处理Java中的文件处理主要通过java.io包中的File类完成。该类允许我们处理文件,包括创建、读取、写入和删除文件。创建