怎样在java代码中调用执行shell脚本呀

遇到个问题   在本地压缩服务器上的xml文件 我就想编写shell教本 脚本内容是链接服务器 找到待压缩文件 压缩文件  说实话 我不知道这样是否可行  试试  但我不知道怎样在java代码中 调用执行shell脚本  谁能指点指点  求教... 

[quote]参数很多了 是不是可以写在一块 中间以空格隔开 也就是把所有的参数以空格链接成一个字符串 放入字符串数组作为一个整体变成一个参数[/quote]
没试过 不确定诶
不过可以先List list = new ArrayList();
然后 for循环添加参数 list.add("param" + i);
然后再 list.toArray();变成 String[] 类型

用一个函数就可以调用了

[quote]String = "sh ./xxxx.sh"; //命令行
Runtime.getRuntime().exec(cmd);[/quote]

哦 对了 用绝对路径来调用shell脚本不容易出错 比如启动/home/asyty/start.sh

[code="java"]Runtime.getRuntime().exec("/home/asyty/start.sh");[/code]

[code="java"]
/**
* 通过ssh远程执行命令
*
* @param target
* 目标
* @param cmd
* 命令
* @param handler
* 执行结果的处理器
* @param rsEncoding
* 错误信息的字符集,为空默认为UTF-8
* @throws IOException
* 连接或执行命令错误抛出异常,原因在e.getMessage()
*/
public static void execCmd(ExecTarget target, String cmd, ExecResultHandler handler,
String rsEncoding) throws IOException
{
AssertUtil.notNull(target, "SshTarget can not be null.");
AssertUtil.hasText(cmd, "ssh cmd must has text.");
String charset = StringTools.hasText(rsEncoding) ? rsEncoding : "UTF-8";
Session session = null;
Channel channel = null;
try
{
session = newSession(target);
channel = session.openChannel("exec");
((ChannelExec) channel).setCommand(cmd);

        // 接收错误信息
        PipedOutputStream errOut = new PipedOutputStream();
        PipedInputStream errIn = new PipedInputStream(errOut);
        ((ChannelExec) channel).setErrStream(errOut);
        // 接收结果信息
        InputStream in = channel.getInputStream();
        String uid = UUID.randomUUID().toString();
        File file = new File(FileHelper.getTmpPath() + "/sshRs-" + uid + ".txt");
        FileOutputStream fos = new FileOutputStream(file);

        channel.connect();
        FileCopyUtils.copy(in, fos);// 将结果存放至文件

        // 判断是否正常退出
        exitChannel(channel, errIn, charset);

        errOut.close();
        if (handler != null) handler.handle(file);
    }
    catch (JSchException e)
    {
        throw new IOException(e.getMessage());
    }
    catch (InterruptedException e)
    {
        logger.error(e.getMessage(), e);
    }
    finally
    {
        if (channel != null) channel.disconnect();
        if (session != null) session.disconnect();
    }
}

[/code]

顶起,简单题 楼上明显在抢分啊!

如果在之后的程序想立刻就用解压的xml文件
加一个Runtime.getRuntime().exec(cmds).waitFor();
等待执行完在用

把参数和命令都放字符串数组里吧
比如

[code="java"]String[] commands = new String[]{"/home/asyty/start.sh", "param1", "param2"};

Process child = Runtime.getRuntime().exec(commands);[/code]

你需要把内容写到XXX.sh文件里 然后再调用。
String cmds = "sh XXX.sh";
try {
Runtime.getRuntime().exec(cmds).waitFor();
} catch (IOException e1) {
e1.printStackTrace();
}catch (InterruptedException e) {
e.printStackTrace();
}