前言

  最近的项目中需要用到解压缩包的功能,客户给出的压缩包的格式主要是rar和zip,因此就打算使用java调用7zip的命令行进行解压文件,本文主要记录一下实现的过程以及其中遇到的问题。

7zip命令行

7z <command> [<switches>...] <archive_name> [<file_names>...][<@listfiles...>]

  7z的commands中包含添加文件到压缩包、从压缩包中删除文件以及提取文件等等多个命令,在这里我就不多赘述,有兴趣的可以在7zip的安装目录使用cmd运行7z.exe查看具体的命令。

  今天我们要做的就是使用密码将压缩包中的文件提取出来,具体的命令如下:

7z x 压缩文件源路径 -o要解压的路径  -aoa -bse1  -p密码
  • x : 表示从压缩包中提取文件
  • -aoa : ao表示覆盖模式,最后的a表示直接覆盖现有文件而不需要任何提示
  • -bs < o|e|p > < 0|1|2 >:set output stream for output/error/progress line

java通过cmd调用7zip解压

	String filePath = "F:\\test\\新建 文本 文档.rar";
//将文件名称中的所有空格都替换为带有双引号的空格
filePath = filePath.replaceAll(" ", "\" \""); String command = "cmd /c start /B D:/工具/7zip/7-Zip/7z.exe x "+filePath+" -oF:/test/ -aoa -bse1 -p123 >F:/test/1.txt";
System.out.println(command);
Runtime.getRuntime().exec(command);

cmd命令解释

  • cmd /c start 7z.exe 表示会启动7z来执行后面的命令,7z启动以后原来的cmd窗口关闭
  • cmd /k start 7z.exe 表示会启动7z来执行后面的命令,7z启动以后原来的cmd窗口不会关闭
  • /B 表示启动应用程序,但是并不创建新的窗口

  通过以上的代码就可以解压完成压缩包文件,如果要知道解压的密码是否正确或者压缩包是否损坏等信息,可以通过获取生成txt日志文件的内容来得知,这个不在本篇范围之后,后续再说。

遇到的问题

7z.exe文件路径找不到

文件路径中存在连续多个空格导致文件找不到

05-11 22:36