Java 解压zip压缩包

简介: 因为最近项目需要批量上传文件,而这里的批量就是将文件压缩在了一个zip包里,然后读取文件进行解析文件里的内容。因此需要先对上传的zip包进行解压。以下直接提供代码供参考:1.第一个方法是用于解压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 }

 

目录
相关文章
|
2月前
|
安全 Java API
JAVA并发编程JUC包之CAS原理
在JDK 1.5之后,Java API引入了`java.util.concurrent`包(简称JUC包),提供了多种并发工具类,如原子类`AtomicXX`、线程池`Executors`、信号量`Semaphore`、阻塞队列等。这些工具类简化了并发编程的复杂度。原子类`Atomic`尤其重要,它提供了线程安全的变量更新方法,支持整型、长整型、布尔型、数组及对象属性的原子修改。结合`volatile`关键字,可以实现多线程环境下共享变量的安全修改。
|
25天前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
34 4
|
1月前
|
Java Apache Maven
Java/Spring项目的包开头为什么是com?
本文介绍了 Maven 项目的初始结构,并详细解释了 Java 包命名惯例中的域名反转规则。通过域名反转(如 `com.example`),可以确保包名的唯一性,避免命名冲突,提高代码的可读性和逻辑分层。文章还讨论了域名反转的好处,包括避免命名冲突、全球唯一性、提高代码可读性和逻辑分层。最后,作者提出了一个关于包名的问题,引发读者思考。
Java/Spring项目的包开头为什么是com?
|
1月前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
54 5
|
2月前
|
Java API 数据处理
Java 包(package)的作用详解
在 Java 中,包(package)用于组织和管理类与接口,具有多项关键作用:1)系统化组织代码,便于理解和维护;2)提供命名空间,避免类名冲突;3)支持访问控制,如 public、protected、默认和 private,增强封装性;4)提升代码可维护性,实现模块化开发;5)简化导入机制,使代码更简洁;6)促进模块化编程,提高代码重用率;7)管理第三方库,避免命名冲突;8)支持 API 设计,便于功能调用;9)配合自动化构建工具,优化项目管理;10)促进团队协作,明确模块归属。合理运用包能显著提升代码质量和开发效率。
|
2月前
|
Java 数据安全/隐私保护
Java 包(package)的使用详解
Java中的包(`package`)用于组织类和接口,避免类名冲突并控制访问权限,提升代码的可维护性和可重用性。通过`package`关键字定义包,创建相应目录结构即可实现。包可通过`import`语句导入,支持导入具体类或整个包。Java提供多种访问权限修饰符(`public`、`protected`、`default`、`private`),以及丰富的标准库包(如`java.lang`、`java.util`等)。合理的包命名和使用对大型项目的开发至关重要。
|
2月前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
112 2
|
2月前
|
算法 Java
Java 压缩文件
在Java中压缩文件是一个常见的需求,通常可以通过使用Java自带的`java.util.zip`包来实现。这个包提供了`ZipOutputStream`类来创建ZIP格式的压缩文件。以下是一个简单的示例,展示了如何将多个文件压缩到一个ZIP文件中。 ### 示例:将多个文件压缩到一个ZIP文件中 ```java import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class ZipFilesExample { public static vo
|
3月前
|
Java Maven 数据库
|
3月前
|
JavaScript Java API
Java日志通关(二) - Slf4j+Logback 整合及排包
作者日常在与其他同学合作时,经常发现不合理的日志配置以及五花八门的日志记录方式,后续作者打算在团队内做一次Java日志的分享,本文是整理出的系列文章第二篇。
下一篇
无影云桌面