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 }

 

目录
相关文章
|
1月前
|
Java 数据安全/隐私保护
JAVA包
JAVA包
12 0
|
1月前
|
存储 Java 文件存储
如何用 Java 压缩 ZIP 文件?
【2月更文挑战第21天】
29 1
|
4月前
|
存储 Java 编译器
Java编程中,包声明(Package Declaration)
Java编程中,包声明(Package Declaration)
73 1
|
4月前
|
Java 关系型数据库 Linux
Linux|Java|jar包的解压和重新打包(更新配置)
Linux|Java|jar包的解压和重新打包(更新配置)
67 0
|
3月前
|
存储 算法 Java
从零开始学习 Java:简单易懂的入门指南之IO序列化、打印流、压缩流(三十三)
从零开始学习 Java:简单易懂的入门指南之IO序列化、打印流、压缩流(三十三)
|
8天前
|
Java Maven
【Java报错】显示错误“Error:java: 程序包org.springframework.boot不存在“
【Java报错】显示错误“Error:java: 程序包org.springframework.boot不存在“
32 3
|
3月前
|
分布式计算 Java 大数据
IO流【Java对象的序列化和反序列化、File类在IO中的作用、装饰器模式构建IO流体系、Apache commons-io工具包的使用】(四)-全面详解(学习总结---从入门到深化)
IO流【Java对象的序列化和反序列化、File类在IO中的作用、装饰器模式构建IO流体系、Apache commons-io工具包的使用】(四)-全面详解(学习总结---从入门到深化)
53 0
|
26天前
|
Java 数据库连接 API
Java 学习路线:基础知识、数据类型、条件语句、函数、循环、异常处理、数据结构、面向对象编程、包、文件和 API
Java 是一种广泛使用的、面向对象的编程语言,始于1995年,以其跨平台性、安全性和可靠性著称,应用于从移动设备到数据中心的各种场景。基础概念包括变量(如局部、实例和静态变量)、数据类型(原始和非原始)、条件语句(if、else、switch等)、函数、循环、异常处理、数据结构(如数组、链表)和面向对象编程(类、接口、继承等)。深入学习还包括包、内存管理、集合框架、序列化、网络套接字、泛型、流、JVM、垃圾回收和线程。构建工具如Gradle、Maven和Ant简化了开发流程,Web框架如Spring和Spring Boot支持Web应用开发。ORM工具如JPA、Hibernate处理对象与数
90 3
|
29天前
|
Java
Java包及访问限定
Java包及访问限定
8 0
|
1月前
|
Java 数据安全/隐私保护
Java的包机制
Java的包机制
26 8
Java的包机制