java解压zip文件至指定文件夹

前面,笔者讲到。如何把文件打包为zip包,那么反过来怎么把zip文件包解压为正常文件呢?把zip包解压为正常文件包,要比把文件打包为zip简单一点。因为存在多级文件的压缩,却不存在多级文件的解压缩。也就是说,压缩时,你要把所有文件都塞到压缩包里。而解压缩只需要解压一级,压缩包里面的压缩文件则不必理会。
直接上代码喽:

    /**
     * 解压文件
     * @param zipPath 要解压的目标文件
     * @param descDir 指定解压目录
     * @return 解压结果:成功,失败
     */
    @SuppressWarnings("rawtypes")
    public boolean decompressZip(String zipPath, String descDir) {
        File zipFile = new File(zipPath);
        boolean flag = false;
        File pathFile = new File(descDir);
        if(!pathFile.exists()){
            pathFile.mkdirs();
        }
        ZipFile zip = null;
        try {
            zip = new ZipFile(zipFile, Charset.forName("gbk"));//防止中文目录,乱码
            for(Enumeration entries = zip.entries(); entries.hasMoreElements();){
                ZipEntry entry = (ZipEntry)entries.nextElement();
                String zipEntryName = entry.getName();
                InputStream in = zip.getInputStream(entry);
                //指定解压后的文件夹+当前zip文件的名称
                String outPath = (descDir+zipEntryName).replace("/", File.separator);
                //判断路径是否存在,不存在则创建文件路径
                File file = new File(outPath.substring(0, outPath.lastIndexOf(File.separator)));
                if(!file.exists()){
                    file.mkdirs();
                }
                //判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压
                if(new File(outPath).isDirectory()){
                    continue;
                }
                //保存文件路径信息(可利用md5.zip名称的唯一性,来判断是否已经解压)
                System.err.println("当前zip解压之后的路径为:" + outPath);
                OutputStream out = new FileOutputStream(outPath);
                byte[] buf1 = new byte[2048];
                int len;
                while((len=in.read(buf1))>0){
                    out.write(buf1,0,len);
                }
                in.close();
                out.close();
            }
            flag = true;
            //必须关闭,要不然这个zip文件一直被占用着,要删删不掉,改名也不可以,移动也不行,整多了,系统还崩了。
            zip.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return flag;
    }

找个例子实现一下:
就你了!

调用:

                String deal_zip = "C:\\20180909.zip";
                String agter_zip = "D:\\red_ant_file";//解压完塞到这里吧
                boolean is_success = AllServiceIsHere.decompressZip(deal_zip, agter_zip);
                if(is_success) {
                    System.err.println("恭喜你,解压成功!");
                }else {
                    System.err.println("sorry, you failed!");
                }

走你!

嗯嗯,达到了我所要求的。赶集去喽!

原文地址:http://blog.51cto.com/13479739/2172847

时间: 2024-11-15 08:25:35

java解压zip文件至指定文件夹的相关文章

Java解压ZIP、RAR文件

解压ZIP: maven地址: <groupId>org.apache.ant</groupId> <artifactId>ant</artifactId> <version>1.9.7</version> </dependency> public static void unzipFile(String zipFileName) throws Exception { try { File f = new File(zip

java 解压 zip 包并删除

需求是这样的,  在服务器上有 运营上传的zip 包,内容是用户的照片,我需要做的是 获取这些照片上传,并保存到 数据库. 这里面的 上传照片,保存数据库都不难,主要问题是解压zip包,和删除zip 包,以及 解压后的文件. 之前在网上找的解压的文件的代码,都存在同一个问题,就是解压之后,无法删除 zip 包.查百度说是 资源占用,可是我已经把所有的流都关闭了哇. 我把解压和删除分成两部分用 jUnit  测试:   第一次测试解压,并不删除包:第二次只删除包.我发现,解压方法和删除方法在同一个

JAVA解压ZIP文件

import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import java.util.zip.ZipEntry; import

java解压zip压缩包

package com.spring.mvc.zip; import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.util.Enumeration;import java.util.zip.ZipEntry; import org.apache.tools.zip.ZipFile; public class zip {

java解压多目录Zip文件(解决中文乱码问题)--转载

原文地址:http://zhangyongbo.iteye.com/blog/1749439 import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import org.apache.tools.zi

【转】JAVA解压.TAR.Z及.ZIP文件

 解压.ZIP文件 package app.qdupr.Method; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile;

Java解压上传zip或rar文件,并解压遍历文件中的html的路径

1.本文只提供了一个功能的代码 public String addFreeMarker() throws Exception { HttpSession session = request.getSession(); User user = (User) session.getAttribute(Constant.USER_SESSION_KEY); String realName = user.getRealName(); System.out.println("--------获取登录用户信

PHP 解压 ZIP 文件到指定文件夹

本类实现参考 php manual 评论 /** * function: 解压zip 格式的文件 * author:friker * date:2015-15-14 * reference:http://php.net/manual/zh/ref.zip.php * all rights reserved:[email protected] */ class Unzip{ public function __construct(){ //init code here... header("con

Java 上传解压zip文件,并且解析文件里面的excel和图片

需求:上传一个zip文件,zip文件里面包含一个excel和很多图片,需要把excel里面的信息解析出来保存到表中,同时图片也转化成base64保存到数据库表中. PS:为了方便不同水平的开发人员阅读,我把代码全部写到Controller里面.这个demo的file入参的类型是MultipartFile,很多网上的例子是File类型.这两个类型在解析文件的时候还是有点区别的. 第①个方法: 1 /** 2 * 这个deomo入参的类型是MultipartFile,很多网上的例子是File类型 3