Java SpringBoot 7z 压缩、解压

这篇具有很好参考价值的文章主要介绍了Java SpringBoot 7z 压缩、解压。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Java SpringBoot 7z 压缩、解压

cmd 7z 文件压缩

7z压缩测试
Java SpringBoot 7z 压缩、解压

添加依赖

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.12</version>
</dependency>
<dependency>
    <groupId>org.tukaani</groupId>
    <artifactId>xz</artifactId>
    <version>1.5</version>
</dependency>

ZipFileUtil

package com.vipsoft.web.utils;

import org.apache.commons.compress.archivers.sevenz.SevenZArchiveEntry;
import org.apache.commons.compress.archivers.sevenz.SevenZFile;
import org.apache.commons.compress.archivers.sevenz.SevenZOutputFile;

import java.io.*;
import java.util.HashMap;
import java.util.Map;

public class ZipFileUtil {
    /**
     * 7z文件压缩
     *
     * @param inputFile  待压缩文件夹/文件名
     * @param outputFile 生成的压缩包名字
     */

    public static void zip7z(String inputFile, String outputFile) throws Exception {
        File input = new File(inputFile);
        if (!input.exists()) {
            throw new Exception(input.getPath() + "待压缩文件不存在");
        }
        SevenZOutputFile out = new SevenZOutputFile(new File(outputFile));
        compress(out, input, null);
        out.close();
    }

    /**
     * @param name 压缩文件名,可以写为null保持默认
     */
    //递归压缩
    public static void compress(SevenZOutputFile out, File input, String name) throws IOException {
        if (name == null) {
            name = input.getName();
        }
        SevenZArchiveEntry entry = null;
        //如果路径为目录(文件夹)
        if (input.isDirectory()) {
            //取出文件夹中的文件(或子文件夹)
            File[] flist = input.listFiles();

            if (flist.length == 0)//如果文件夹为空,则只需在目的地.7z文件中写入一个目录进入
            {
                entry = out.createArchiveEntry(input,name + "/");
                out.putArchiveEntry(entry);
            } else//如果文件夹不为空,则递归调用compress,文件夹中的每一个文件(或文件夹)进行压缩
            {
                for (int i = 0; i < flist.length; i++) {
                    compress(out, flist[i], name + "/" + flist[i].getName());
                }
            }
        } else//如果不是目录(文件夹),即为文件,则先写入目录进入点,之后将文件写入7z文件中
        {
            FileInputStream fos = new FileInputStream(input);
            BufferedInputStream bis = new BufferedInputStream(fos);
            entry = out.createArchiveEntry(input, name);
            out.putArchiveEntry(entry);
            int len = -1;
            //将源文件写入到7z文件中
            byte[] buf = new byte[1024];
            while ((len = bis.read(buf)) != -1) {
                out.write(buf, 0, len);
            }
            bis.close();
            fos.close();
            out.closeArchiveEntry();
        }
    }

    /**
     * 7z解压缩
     * @param z7zFilePath	7z文件的全路径
     * @return  压缩包中所有的文件
     */
    public static Map<String, String> unZip7z(String z7zFilePath){

        String un7zFilePath = "";		//压缩之后的绝对路径

        SevenZFile zIn = null;
        try {
            File file = new File(z7zFilePath);
            un7zFilePath = file.getAbsolutePath().substring(0, file.getAbsolutePath().lastIndexOf(".7z"));
            zIn = new SevenZFile(file);
            SevenZArchiveEntry entry = null;
            File newFile = null;
            while ((entry = zIn.getNextEntry()) != null){
                //不是文件夹就进行解压
                if(!entry.isDirectory()){
                    newFile = new File(un7zFilePath, entry.getName());
                    if(!newFile.exists()){
                        new File(newFile.getParent()).mkdirs();   //创建此文件的上层目录
                    }
                    OutputStream out = new FileOutputStream(newFile);
                    BufferedOutputStream bos = new BufferedOutputStream(out);
                    int len = -1;
                    byte[] buf = new byte[(int)entry.getSize()];
                    while ((len = zIn.read(buf)) != -1){
                        bos.write(buf, 0, len);
                    }
                    bos.flush();
                    bos.close();
                    out.close();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if (zIn != null)
                    zIn.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        Map<String, String> resultMap = getFileNameList(un7zFilePath, "");
        return resultMap;
    }

    /**
     * 获取压缩包中的全部文件
     * @param path	文件夹路径
     * @childName   每一个文件的每一层的路径==D==区分层数
     * @return  压缩包中所有的文件
     */
    private static Map<String, String> getFileNameList(String path, String childName) {
        System.out.println("path:" + path + "---childName:"+childName);
        Map<String, String> files = new HashMap<>();
        File file = new File(path); // 需要获取的文件的路径
        String[] fileNameLists = file.list(); // 存储文件名的String数组
        File[] filePathLists = file.listFiles(); // 存储文件路径的String数组
        for (int i = 0; i < filePathLists.length; i++) {
            if (filePathLists[i].isFile()) {
                files.put(fileNameLists[i] + "==D==" + childName, path + File.separator + filePathLists[i].getName());
            } else {
                files.putAll(getFileNameList(path + File.separator + filePathLists[i].getName(), childName + "&" + filePathLists[i].getName()));
            }
        }
        return files;
    }
}

Test文章来源地址https://www.toymoban.com/news/detail-416352.html

package com.vipsoft.web;

import com.vipsoft.web.utils.ZipFileUtil;
import org.junit.jupiter.api.Test; 

public class ZipTest {

    @Test
    void zip7zTest() throws Exception {
        String inputPath = "D:\\temp\\logs\\logs";
        String outputPath = "D:\\temp\\logs\\1.7z";
        ZipFileUtil.zip7z(inputPath, outputPath); 
    }

    @Test
    void unZip7zTest() throws Exception {
        String outputPath = "D:\\temp\\logs\\1.7z";
        ZipFileUtil.unZip7z(outputPath);
    }
}

到了这里,关于Java SpringBoot 7z 压缩、解压的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt 编译使用Bit7z库接口调用7z.dll、7-Zip.dll解压压缩常用Zip、ISO9660、Wim、Esd、7z等格式文件(二)

    修改qt5 7zip源码编译及使用(含展示进度)一文中的封装类ZlibHelper代码类,继承多线程,使解压,压缩时进度条不影响界面,同时添加压缩文件中的文件预览功能,建议直接看源码 lib_bit7z.h 头文件代码

    2024年02月11日
    浏览(42)
  • Qt 编译使用Bit7z库接口调用7z.dll、7-Zip.dll解压压缩常用Zip、ISO9660、Wim、Esd、7z等格式文件(一)

    bit7z 一个c++静态库,为 7-zip 共享库提供了一个干净简单的接口 使用 CMAKE 重新编译 github 上的 bit7z 库,用来解压/预览 iso9660 , WIm , Zip , Rar 等常用的压缩文件格式。 z-zip 库支持大多数压缩文件格式 bit7z 是一个跨平台的c++静态库,它允许通过一个干净简单的包装器接口从7-

    2024年02月11日
    浏览(81)
  • 【Linux笔记】压缩、解压文件的 4 种方式。tar、gzip、gunzip、zip、unzip、7z命令使用方法

    目录 1、使用 tar 命令: 1.1. 压缩: 1.2. 解压: 1.3. tar 命令各参数含义 2. gzip、gunzip gzip 命令: 压缩文件: 保留原始文件,创建压缩文件: 保留原始文件,显示压缩进度: gunzip 命令: 解压文件: 保留压缩文件,创建原始文件: 保留压缩文件,显示解压进度: 3. zip、unzip

    2024年02月03日
    浏览(50)
  • 【方法】7Z压缩包如何解压?

    你知道7Z压缩包如何解压吗? 7Z是一种主流高效的压缩格式,它可以用多种压缩解压软件来解压,像7-Zip、WinRAR等常用的解压缩软件都可以解压7Z压缩包。 首先我们可以从官网或者软件商店里免费下载7-Zip或者WinRAR解压缩软件,再安装在电脑里。 安装完成后,用鼠标选中压缩包

    2024年02月13日
    浏览(47)
  • 7z 命令行压缩解压详解-中文版

    1) 简介 7z,全称7-Zip, 是一款开源软件。是目前公认的压缩比例最大的压缩解压软件。 主页:http://www.7-zip.org/ 中文主页:http://7z.sparanoid.com/ 命令行版本下载:http://7z.sparanoid.com/download.html Windows去官网下载安装包安装 linux使用命令安装: sudo apt install p7zip-full 注: p7zip、p7zip-

    2024年02月06日
    浏览(42)
  • Windows上使用7z命令行进行压缩解压

    下载安装7z:官网 7-Zip 配置环境变量:win键按下,搜索 env,打开编辑环境变量,选择环境变量,在系统变量下的 path 中添加你的7zip安装位置,如 C:Program Files7-Zip,一路OK确认,关闭窗口 检查可用性:打开cmd,输入7z命令,查看是否可用 7z a -t[format] archive_name file_name 参数

    2024年02月10日
    浏览(44)
  • Java的zip文件压缩与解压:ZipInputStream,ZipOutputStream

       用ZipOutputStream来压缩一个文件夹时,要搭配ZipEntry来使用。ZipEntry是用来创建压缩文件的。    举个例子,向压缩文件中添加一个文件的代码: 如下图:    在创建ZipEntry对象时可以指定文件在压缩包的位置:new ZipEntry(“second-dirsecond-01.txt”)    在使用ZipOutputStrea

    2024年02月16日
    浏览(51)
  • 如何打开7z格式的压缩文件?

    7z也是压缩文件的格式之一,是开源软件 「7-Zip 」的开源压缩格式,虽然不如Zip应用广泛,但7z的压缩率更高,可以将文件压缩到最小,也是不少人使用的压缩格式。如果收到了7z格式的文件,要如何打开和解压呢? 我们可以在应用商店找到【7-Zip】软件,下载后可以用来打

    2024年02月05日
    浏览(55)
  • Java 压缩多个文件为zip包(中间不生成临时文件,直接压缩为zip二进制流),以及解压zip包二进制流为文件

    这篇博客将提供俩种方法, 提前生成要压缩的多个文件,然后读取文件夹多层或一层去遍历压缩zip包 直接用原始文件名称及二进制流,压缩返回zip包二进制流,中间不生成冗余文件; 很明显方法2更优一些; 解压zip文件或者zip文件流验证; 压缩俩个文件到zip包,并分别解析

    2024年02月06日
    浏览(54)
  • 【Linux】解压缩文件命令(7z、zip,tar等)

    压缩文件: zip compressed.zip file1.txt file2.txt folder/ 解压文件: unzip compressed.zip -d destination_folder/ 压缩文件: 7z a compressed.7z file1.txt file2.txt folder/ 解压文件: 7z x compressed.7z -odestination_folder/ 常用于对单个文件进行压缩,生成 .gz 后缀的压缩文件。可以使用以下命令进行压缩和解压

    2024年02月10日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包