当我们需要借助一些工具来进行大规模批量操作时,就会考虑通过Java程序直接命令行调用工具,并通过流的输出结果采取相应的操作,这样既能达到节省人力的目的,又能昼夜不断的运行,提高执行速度
此处以工作中需要用到解压工具批量解压大量压缩包文件为例:
private static void unzip() {
String exePath = "D:\\work\\HaoZip\\HaoZipC.exe";
if (!new File(exePath).exists())
throw new RuntimeException("HaoZip程序未安装,请确保" + exePath + " 文件存在!");
//x:全部解压 -y 所有提示都选是 -o解压到目录
String cmd = "\"" + exePath + "\"" + " x -y -o\"" + unzipDir.getAbsolutePath() + "\"";
//设置解压密码
if (param.getPwd() != null)
cmd += " -p" + param.getPwd();
//设置压缩包文件
cmd += " \"" + zipFile.getAbsolutePath() + "\"";
try {
log.debug("好压解压:" + cmd);
Process p = Runtime.getRuntime().exec(cmd);
StringBuilder sb = new StringBuilder();
BufferedReader bufferedReader = new BufferedReader
(new InputStreamReader(p.getInputStream(), "gbk"));
char[] chars = new char[1];
String line = "";
while (bufferedReader.read(chars) != -1) {
sb.append(chars);
line+=String.valueOf(chars);
if(String.valueOf(chars).equals("\n")) {
line="";
}else {
if (line.contains("输入解压口令:")) {
p.destroy();
//销毁后等一下,否则资源文件不会立刻被释放
ThreadUtil.sleepSeccond(3);
throw new UnzipNeedPasswordException();
}
}
}
}