前面写过一个版本的Java代码用来调用linux shell脚本,原文如下:http://www.linuxidc.com/Linux/2013-05/83739.htm不过没有试过Windows下运行,试了一下,还是不错的,把代码做了一些调整,封装成对象,这样更方便多线程下调用,不用担心静态变量互相干扰的问题。先看一下怎么用: public static void main(String[] args) { try { Command command = new Command(); CommandResult result1 = command.exec("net stop nginx", 20000); System.out.println("command executiion succeeds: " + result1.getOutput()); CommandResult result2 = command.exec("net start nginx", 20000); System.out.println("command executiion succeeds: " + result2.getOutput()); } catch (CommandError ex) { System.out.println("command execution failed: " + ex.getMessage()); } }由此可见,有三个类:Command, CommandResult和CommandError。当命令不能运行,将会抛出CommandError异常对象。如果命令能够运行,不管是否成功或者失败,都返回CommandResult对象,里面有两个属性output和error,包含了执行成功的消息和错误消息。CommandError.java代码:package command;/** * * @author shu6889 */ public class CommandError extends Exception { /** * Creates a new instance of * <code>CommandError</code> without detail message. */ public CommandError() { } /** * Constructs an instance of * <code>CommandError</code> with the specified detail message. * * @param msg the detail message. */ public CommandError(String msg) { super(msg); }
public CommandError(Throwable ex) { super(ex); } }CommandResult.java代码package command; /** * Describe class CommandResult here. * */ public class CommandResult { public static final int EXIT_VALUE_TIMEOUT=-1;
private String output; void setOutput(String error) { output=error; } public String getOutput(){ return output; } int exitValue; void setExitValue(int value) { exitValue=value; } int getExitValue(){ return exitValue; } private String error; /** * @return the error */ public String getError() { return error; } /** * @param error the error to set */ public void setError(String error) { this.error = error; } }