前言
最近在和一个档案管理系统对接,需要把我方系统文件压缩成zip格式,通过ftp的方式upload到指定的服务器上,考虑到Java的平台无关性,一开始便使用Java自带的类库java.util.zip来实现文件的压缩,谁曾想传送过去的压缩文件对方系统解析出错。于是只能改用cmd命令调用WinRAR的方式来实现,敌方程序员完美的破坏了Java的可移植性!!
调用cmd命令
废话说了那么多,下面直接上菜:
/**
* <p>Description: 调用本地压缩工具进行压缩</p>
* @param zipFilePath 文件压缩后的存放路径
* @param sourceFilePath 源文件路径
* @return
* @date 2019年2月26日
* @author 怪蜀黍
*/
public String compressFile(String zipFilePath, String sourceFilePath) {
File file = new File(sourceFilePath);
final String cmd = "D:\\Program Files\\WinRAR\\WinRAR.exe"+" a -ibck -ep1 "+zipFilePath+" ";
Process proc = null;
if (file.isDirectory()) {
File[] files = file.listFiles();
for (int i = 0; i<files.lengt ; i++) {
try {
proc = Runtime.getRuntime().exec(cmd+files[i]);
// waitFor将返回exitValue的值0表示正常结束
if (proc.waitFor() != 0)
return ;
} catch (Exception e) {
System.out.println("压缩失败!");
}
}
}
return "";
}
我这里WinRAR的安装路径为:D:\Program Files\WinRAR\WinRAR.exe,a表示添加文件到压缩文件,-ibck表示后台运行,-ep1表示排除基本目录。其他命令参数可自行百度。
根据实际需求,文件压缩后,点开压缩包要如下图的形式,所以我这里使用了一个for循环,将文件或文件夹一个个的压缩到压缩包里面。
展望
个人水平有限,如有不妥望指正。解压也基本类似,查一查WinRAR的命令参数了解一下即可,此处不再复述。