Java -- 指定路径下的zip文件解压,其中的zip中包含文件全部解压

Posted 小智RE0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java -- 指定路径下的zip文件解压,其中的zip中包含文件全部解压相关的知识,希望对你有一定的参考价值。


例如需要将demoZipSources路径下的zip文件中的全部解压到demoZipTarget文件夹

例如demoZipSources下的zip文件SourceZip.zip,其中分别有三个zip;其中这几个文件夹有不同的文件,需要将这些文件全部解压到指定的同一个目录下;



效果,解压所有文件到目标文件


import java.io.*;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.LinkedList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;

/**
 * @BelongsProject: xiaozhire0goods
 * @BelongsPackage: com.lzq.demoUse
 * @Author: 小智RE0 --- 学习记录
 * @Date: 2022/12/8 21:36
 * @Description: TODO
 */
public class DemoFileMutilUnZip 
    public static void main(String[] args) 
        dealUnZip();
    

    //处理解压zip
    public static void dealUnZip() 
        List<String> sourcesList = new ArrayList<>();
        String zipPath1 = "F:\\\\demoZipSources\\\\SourceZip.zip";
        String targetZipPath = "F:\\\\demoZipTarget\\\\";
        File targetFile = new File(targetZipPath);
        sourcesList.add(zipPath1);
        //sourcesList 真实使用时可能有多个;此处先以一个文件为例;
        if (sourcesList != null && !sourcesList.isEmpty()) 
            for (String zipPath : sourcesList) 
                if (zipPath.endsWith(".zip")) 
                    dealzip(zipPath, targetZipPath);
                
            
        

        //解压后的文件夹可能还有文件夹;
        File[] files = targetFile.listFiles();
        if (files != null) 
            for (File file : files) 
                String fileName = file.getName();
                if (fileName.endsWith(".zip")) 
                    dealzip(file.getPath(), targetZipPath);
                    //用完后就删掉这个zip;
                    file.delete();
                
            
        
    

    //处理文件解压;
    public static void dealzip(String zipSourcePath, String targetZipPath) 
        //判断目标地址是否存在,如果没有就创建
        File pathFile = new File(targetZipPath);
        if (!pathFile.exists()) 
            pathFile.mkdirs();
        
        ZipFile zipFile = null;
        try 
            zipFile = new ZipFile(zipSourcePath, Charset.forName("UTF-8"));
            //若zip中含有中文名文件,换GBK
            //zip = new ZipFile(zipPath, Charset.forName("GBK"));
            //遍历里面的文件及文件夹
            Enumeration entries = zipFile.entries();
            while (entries.hasMoreElements()) 
                ZipEntry entry = (ZipEntry) entries.nextElement();
                String zipEntryName = entry.getName();
                InputStream in = zipFile.getInputStream(entry);
                //也就是把这个文件加入到目标文件夹路径;
                String outpath = (targetZipPath + zipEntryName).replace("/", File.separator);
                //不存在则创建文件路径
                File file = new File(outpath.substring(0, outpath.lastIndexOf(File.separator)));
                if (!file.exists()) 
                    file.mkdirs();
                
                File outPathFile = new File(outpath);
                /*String outPathFileName = outPathFile.getName();
                if(outPathFileName.endsWith(".zip"))
                    dealzip(outpath,targetZipPath);
                */
                //文件夹就不解压;
                if (outPathFile.isDirectory()) 
                    continue;
                
                OutputStream out = new FileOutputStream(outpath);
                byte[] bf = new byte[2048];
                int len;
                while ((len = in.read(bf)) > 0) 
                    out.write(bf, 0, len);
                
                in.close();
                out.close();
            
            zipFile.close();
         catch (Exception e) 
            e.printStackTrace();
        
    


以上是关于Java -- 指定路径下的zip文件解压,其中的zip中包含文件全部解压的主要内容,如果未能解决你的问题,请参考以下文章

activemq指定java路径问题

Python解压.zip文件

linux如何解压多个目录下的多个zip包

通过zipfile解压指定目录下的zip文件

assets里的zip压缩文件并解压到指定路径下保存

解压特定zip压缩文件中特定文件,Java