日期:2014-05-20  浏览次数:20744 次

java调用linux压缩命令
tar -cvf /was/rdccs/rdccsdev/www/export/Tmp2013122076092008.tar.gz /was/rdccs/rdccsdev/www/export/Tmp2013122076092008/*

  
这个命令手动执行可以.用java调用也能压缩.但是却打不开,报文件损坏.


java代码:


public void doExecUnixCMD(String folder) throws SinocpcException,
IOException {

String cmdString = "";
 
try {
// Process exec = null;
int chmod = 0, cd = 0, zip = 0;
// 1.赋文件夹权限
cmdString = "chmod 777 /was/rdccs/rdccsdev/www/export";
GlobalVariable.log.debug("1.赋文件夹权限: " + cmdString);
chmod = Runtime.getRuntime().exec(cmdString).waitFor();
GlobalVariable.log.debug("chmod=, cd= , zip=" + chmod + "," + cd
+ "," + zip);

// 2.执行压缩命令
//cmdString = "tar -cvf " + folder + ".tar.gz " + folder + "/*";
cmdString = "zip -r " + folder + ".zip " + folder + "/*";
GlobalVariable.log.debug("2.执行压缩命令: " + cmdString);
zip = Runtime.getRuntime().exec(cmdString).waitFor();

} catch (Exception e) {
// e.printStackTrace();
GlobalVariable.log.debug("压缩命令执行失败:" + e.getMessage() + "命令"
+ cmdString);
}
/*
 * finally { bufferedReader.close(); }
 */
GlobalVariable.log.debug("AAA压缩命令执行结束");
}

------解决方案--------------------
需要输出 exec() 所返回的 Process 对象的 getOutputStream() 和 getErrorStream()
------解决方案--------------------
引用:
求详细说明啊.


还不够详细么。。。
Process proc = Runtime.getRuntime().exec(cmdString);
InputStream stdout = proc.getInputStream();
InputStream stderr = proc.getErrorStream();

然后用循环读取(不要用阻塞式的方法)这两个InputStream的内容。