【记】用Java原生自带的Process能力在windows环境解压rar压缩包

it2025-10-24  10

用Java原生自带的Process能力在windows环境解压rar压缩包

背景:今天在windows环境中的idea运行springboot项目的代码,结果发现有同学写了这样一组代码:

问题:windows上是使用不了sh -c unzip命令的,所以尝试用windows的命令替换,当然实际情况最好的是不要用这样的方式解压代码,对于环境依赖性太强了。

应该用java读取文件,解压然后再写入系统,这样不论什么环境都可以运行了。

直接上代码:

package com.liur.demo.test; import java.io.File; import java.io.IOException; import java.io.InputStream; /** * * 本用例的目的用来在windows系统中实现压缩文件解压功能 * 前置条件1:在D盘根目录创建一个aaa.rar的压缩文件 * 前置条件2:将unrar.exe文件复制到C:\Windows目录下,或者配置到path中 * 执行main方法后,会将aaa.rar文件解压到D盘根目录 * * */ public class ProcessBuilderTest { public static void main(String[] args) { //windows和linux有点不同,windows的参数必须分开 ProcessBuilder processBuilder = new ProcessBuilder( "unrar", "e", "D:\\aaa.rar", "D:\\" ).directory(new File("D:\\")); Process process = null; try { process = processBuilder.start(); } catch (IOException e) { e.printStackTrace(); } byte[] b = new byte[1024]; int readbytes = -1; StringBuffer sb = new StringBuffer(); //读取进程输出内容 InputStream in = process.getInputStream(); try { while ((readbytes = in.read(b)) != -1) { //windows一般用的是GBK编码,不转码的话会出现中文乱码 sb.append(new String(b, 0, readbytes, "GBK")); } } catch (IOException e) { } finally { try { in.close(); } catch (IOException e1) { } } //打印进程的输出内容 System.out.println(sb.toString()); } }

 

最新回复(0)