转贴请注明出处:
http://blog.csdn.com/froole
上一部分定义了一个支持超时控制功能的类——CommandExec
在这部分,将展示CommandExec的使用方法,并且向读者展示如何取得命令的执行结果并将他们打印出来。
环境描述:
假设执行环境为Windows,在C盘(系统盘)上有一个test.zip文件,里面压缩一个test.txt文本文件。
用系统自带的unzip -l命令可以显示出压缩文件的内容。
并且,系统还有sleep命令,用来暂停处理。
执行处理步骤:
以下是代码,有兴趣的读者可以在自己的电脑上测试一下。
相关:
- 浅析Java执行外部命令的几个要点(1)
- 浅析Java执行外部命令的几个要点(2)
- 浅析Java执行外部命令的几个要点(3)
- 浅析Java执行外部命令的几个要点(4)
<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
转贴请注明出处: http://blog.csdn.net/froole
上一部分定义了一个支持超时控制功能的类——CommandExec
在这部分,将展示CommandExec的使用方法,并且向读者展示如何取得命令的执行结果并将他们打印出来。
环境描述:
假设执行环境为Windows,在C盘(系统盘)上有一个test.zip文件,里面压缩一个test.txt文本文件。
用系统自带的unzip -l命令可以显示出压缩文件的内容。
并且,系统还有sleep命令,用来暂停处理。
执行处理步骤:
- 生成一个新的CommandExec实现,timeout为6秒
- 执行系统命令[unzip -l C:/test.zip],确认其正常结束并打印执行结果;
- 执行[sleep 7],让处理暂停7秒,但是,到了6秒的时候程序会被强制终止,从出口值可以判断[sleep 7]的执行结果是失败的;
- 执行[unzip -l C:/test.zip],由于Java中将“C:/test.zip”认为“C:test.zip”,由于找不到文件执行将失败,并打印出错误信息。
以下是代码,有兴趣的读者可以在自己的电脑上测试一下。
- import java.io.IOException;
- import java.io.InputStream;
- public class CommandExecTest {
- /**
- *
- * 执行结果:
- *
- * <pre>
- * processSuccess Result:0
- * processTimeout Result:1
- * processFail Result:9
- * >>>>>>>Sucess process:
- * ==================
- * sucess std:
- * Archive: C:/test.zip
- * Length Date Time Name
- * -------- ---- ---- ----
- * 0 08/12/25 20:09 test/test.txt
- * -------- -------
- * 0 1 file
- * ==================
- * error std:
- * ==================
- * >>>>>>>Timeout process:
- * ==================
- * sucess std:
- * ==================
- * error std:
- * ==================
- * >>>>>>>Fail process:
- * ==================
- * sucess std:
- * ==================
- * error std:
- * unzip: cannot find either C: est.zip or C: est.zip.zip.
- * ==================
- * </pre>
- *
- * @param args
- * @throws Exception
- */
- public static void main(String[] args) throws Exception {
- Runtime runtime = Runtime.getRuntime();
- long timeout = 6 * 1000L;
- long invterval = 500L;
- CommandExec exec = new CommandExec(runtime, timeout, invterval);
- // 执行成功
- String[] command = new String[] { "unzip", "-l", "C:/test.zip" };
- Process processSuccess = exec.exec(command);
- System.out.println("processSuccess Result:" + processSuccess.exitValue());
- // 超时执行
- command = new String[] { "sleep", "7" };
- Process processTimeout = exec.exec(command);
- System.out.println("processTimeout Result:" + processTimeout.waitFor());
- // 执行失败
- command = new String[] { "unzip", "-l", "C:/test.zip" };
- Process processFail = exec.exec(command);
- System.out.println("processFail Result:" + processFail.waitFor());
- // 打印结果
- System.out.println(">>>>>>>Sucess process:");
- dispProcess(processSuccess);
- System.out.println(">>>>>>>Timeout process:");
- dispProcess(processTimeout);
- System.out.println(">>>>>>>Fail process:");
- dispProcess(processFail);
- }
- /**
- *
- * 打印输出结果
- *
- * @param target
- * @throws IOException
- */
- static void dispProcess(Process target) throws IOException {
- InputStream stdIn = target.getInputStream();
- InputStream stdErr = target.getErrorStream();
- //
- try {
- System.out.println("==================");
- System.out.println("sucess std:");
- int c1;
- while ((c1 = stdIn.read()) != -1) {
- System.out.print((char) c1);
- }
- System.out.println("==================");
- System.out.println("error std:");
- int c2;
- while ((c2 = stdErr.read()) != -1) {
- System.out.print((char) c2);
- }
- System.out.println("==================");
- } finally {
- try {
- if (stdIn != null) {
- stdIn.close();
- }
- if (stdErr != null) {
- stdErr.close();
- }
- } catch (Exception e) {
- }
- }
- }
- }
相关:
- 浅析Java执行外部命令的几个要点(1)
- 浅析Java执行外部命令的几个要点(2)
- 浅析Java执行外部命令的几个要点(3)
- 浅析Java执行外部命令的几个要点(4)
<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
转贴请注明出处: http://blog.csdn.net/froole