java语言项目集成7zip解压、压缩文件夹

最近java语言项目集成7zip解压文件夹,后端下载了一个经特殊算法压缩的 zip 文件,由于不能用 java 本身自带的解压方式,必须採用 7Zip 来解压。因此,提到了本文中在 java后端调用外部 7zip exe 来解压文件,以解决此问题,实现过程如下:

1、定义缓冲区类

package com.roy.config;

import java.io.*;
import java.nio.charset.Charset;

/**
 * 解压文件
 */
public class CommonStreamGobbler extends Thread{
  InputStream is;
  String type;

  public CommonStreamGobbler(InputStream is, String type) {
    this.is = is;
    this.type = type;
  }

  public void run() {
    try {
      InputStreamReader isr = new InputStreamReader(is, Charset.forName("GBK"));
      BufferedReader br = new BufferedReader(isr);
      String line=null;
      while ((line = br.readLine()) != null) {
        System.out.println(type + ">" + line);
      }
    } catch (IOException ioe){
      ioe.printStackTrace();
    }
  }

}

2、下载 7z.exe 过程

官网下载地址

选择合适的版本下载 

3、运行外部 7z.exe流程

/**
   * cmd 7z 解压
   * @param outPutFile
   * @param outputDir
   * @return
   * @throws InterruptedException
   */
  public static int unzip (String outPutFile,String outputDir,String zipToPackagePath) throws InterruptedException, IOException {
    String[] cmd = {
           // "C:\\Program Files\\7-Zip\\7z.exe",
            zipToPackagePath,//7-Zip安装的路径
            "x",//x:完整路径下解压文件
            "-y",//-y:所有确认选项都默认为是(即不出现确认提示)
            "-aos", // 跳过已存在的文件
            outPutFile,//D:\test\测试文件.zip"-x!*MSS*",
            "-o" + outputDir//-o:设置输出目录,D:\test
    };
    Runtime rt = Runtime.getRuntime();
    Process proc = rt.exec(cmd);

    // 监听出错信息
    CommonStreamGobbler errorGobbler = new CommonStreamGobbler(proc.getErrorStream(), "ERROR");

    // 监听输出信息
    CommonStreamGobbler outputGobbler = new CommonStreamGobbler(proc.getInputStream(), "OUTPUT");

    // 启动监听输入
    errorGobbler.start();
    outputGobbler.start();

    // 确保 Runtime.exec 进程运行完成
    int exitVal = proc.waitFor();
    System.out.println("ExitValue: " + exitVal);
     return exitVal;
  }

4、调用7-Zip压缩.zip文件

  /**
   * 生成.toZip压缩文件
   * @param filePath 需要压缩的文件路径
   * @param zipFileName 生成压缩文件的文件名(全路径)
   * @throws Exception
   */
  public static void fileToZip(String filePath, String zipFileName) throws Exception {
    //zipToolPath 是本地7-Zip软件的安装路径
    String zipToolPath = "C:/Program Files/7-Zip/7z.exe";
    zipToolPath = zipToolPath .replaceAll(" ", "\" \"");//所有空格都替换成带有双引号的空格
    String exec = zipToolPath + " a " + zipFileName + " -r *.*";
    File file = new File(filePath);
    Runtime.getRuntime().exec(exec,null,file);
    //执行成功后在ZipFileName路径下可以找到相应的压缩文件
  }

集成过程中可能遇到一些问题,可以参考这篇文章,感觉总结的比较全面

问题总结

到此、外部解压和压缩分享完毕,小伙伴手动演示一次,就会很快掌握。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寅灯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值