java调用7zip解压压缩包
前言
最近的项目中需要用到解压缩包的功能,客户给出的压缩包的格式主要是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
-bs命令其实我没有太明白,字面的意思大概是说为输出/错误/进程行设置输出流,如果不设置-bse1属性,当解压缩出现错误,例如文件找不到时,错误提示就会出现在cmd窗口中而不是生成的log文件中,因此必须加上-bse1命令
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文件路径找不到
出现该问题是由于7zip的安装路径中存在空格
解决方案:
- 选择7zip安装路径,不要安装在有空格的路径中
- 将路径中的空格使用双引号引起来,如C:\“Program Files”\7-Zip或者“C:\Program Files\7-Zip”或者C:\Program“ ”Files\7-Zip
文件路径中存在连续多个空格导致文件找不到
出现该问题是由于
Runtime.getRuntime().exec(command)方法在执行过程中,会将文件路径中的多个连续空格转换为单个空格,这种情况在文件全路径外面加上双引号也是不管用的
解决方案:
- 替换文件路径中的空格,将每一个空格都替换为带有双引号的空格即可
java调用7zip解压压缩包的更多相关文章
- 7-zip 解压
7-zip 解压 1.引入依赖文件 sevenzipjbinding.jar sevenzipjbinding-Allwindows.jar <!-- https://mvnrepository ...
- node解压压缩包以及压缩图片
node解压压缩包以及压缩图片 首先保证电脑安装node环境,下载地址:http://nodejs.cn //可以打开一个dos窗口输入node -v进行确认是否安装成功 C:\ > node ...
- 在 Java 项目中解压7Zip特殊压缩算法文件
1 问题描写叙述 Java Web 后端下载了一个经特殊算法压缩的 zip 文件,由于不能採用 java 本身自带的解压方式,必须採用 7Zip 来解压.所以,提到了本文中在 java web 后端调 ...
- java压缩文件解压:调用WinRAR5命令强于自己写代码实现
最近,手上维护着一个几年前的系统,技术是用的JSP+Strust2,系统提供了rar和zip两种压缩格式的解压功能,后台是用java实现的 1.解压rar格式,采用的是java-unrar-0.3.j ...
- java 压缩与解压
最近复习到IO,想找个案例做一做,恰好下载了许多图片压缩包,查看图片很不方便,所以打算用IO把图片都解压到同一个文件夹下.然后集中打包. 本例使用jdk自带的ZipInputStream和ZipOut ...
- java压缩与解压
一 概述 1.目录进入点 目录进入点是文件在压缩文件中的映射,代表压缩文件.压缩文件时,创建目录进入点,将文件写入该目录进入点.解压时,获取目录进入点,将该目录进入点的内容写入硬盘指定文件. 如果目录 ...
- Java实现ZIP解压功能
1.引入依赖 <dependency> <groupId>org.apache.ant</groupId> <artifactId>ant</ar ...
- java 压缩以及解压文件,有tar,zip,gz(gizp)和解压
package com.yabsz.decompCompr; import java.io.File; import java.util.ArrayList; import java.util.Lis ...
- Java 上传解压zip文件,并且解析文件里面的excel和图片
需求:上传一个zip文件,zip文件里面包含一个excel和很多图片,需要把excel里面的信息解析出来保存到表中,同时图片也转化成base64保存到数据库表中. PS:为了方便不同水平的开发人员阅读 ...
随机推荐
- Percona Toolkit安装、使用
percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql和系统任务,这些任务包括: l 检查master和slave数据的一致性 l 有效地对记 ...
- C语言数据结构-顺序线性表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作
1.数据结构-顺序线性表的实现-C语言 #define MAXSIZE 100 //结构体定义 typedef struct { int *elem; //基地址 int length; //结构体当 ...
- CF877E Danil and a Part-time Job 线段树维护dfs序
\(\color{#0066ff}{题目描述}\) 有一棵 n 个点的树,根结点为 1 号点,每个点的权值都是 1 或 0 共有 m 次操作,操作分为两种 get 询问一个点 x 的子树里有多少个 1 ...
- Python自动化开发学习20-Django的form组件
武沛齐老师的Django的FORM组件:http://www.cnblogs.com/wupeiqi/articles/6144178.html 转自:http://blog.51cto.com/st ...
- hdu3483 A Very Simple Problem 非线性递推方程2 矩阵快速幂
题目传送门 题目描述:给出n,x,mod.求s[n]. s[n]=s[n-1]+(x^n)*(n^x)%mod; 思路:这道题是hdu5950的进阶版.大家可以看这篇博客hdu5950题解. 由于n很 ...
- hdu1387 模拟队列
Team Queue Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- 安装openstack时遇到的错误
学习opensatck的第一步是安装DevStack来进行本机操作 1. 下面命令没有权限,解决办法:切换到root用户下执行sudo -s echo "stack ALL=(ALL) NO ...
- VS2015+NUnit+OpenCover 完成单元测试代码覆盖率测试
1.VS2015+NUnit+OpenCover 完成单元测试代码覆盖率测试 https://download.csdn.net/download/qq_39441918/10522539 2.*注意 ...
- getElementsByTagName() 兼容性
写东西的时候用到了getElementsByTagName(),我一直以为js 写的东西是不会有兼容性的,这次在ie8下,getElementsByTagName()就不支持了,那怎么办呢,我就查到一 ...
- Lock接口和ReadWriteLock接口
Lock接口 Lock接口在java.util.concurrent.locks包中,在jdk1.5之后才有. Lock接口有6个方法: void lock(); void lockInterrupt ...