linux调⽤shell脚本传参例⼦:
boolean execResult = true;
BufferedReader br = null;
try
{
//linux脚本test.sh需要另个⼊参(可以有0或多个参数)
String account = "test"
String pwd = "12345";
String shellPath = "...脚本的实际路径"
ProcessBuilder b = new ProcessBuilder("sh", "test.sh", account,
password);
b = b.directory(new File(shellPath));
Process rt = b.start();
String line = "";
//脚本返回的信息流
br = new BufferedReader(new InputStream()));
while (null != (line = br.readLine()))
linuxshell脚本怎么运行{
//对结果做处理
}
rt.destroy();
}
catch (Exception e)
{
execResult = false;
}
finally
{
if (null != br)
{
IOUtils.closeQuietly(br);
}
}
java5引⼊了ProcessBuilder类,该类的功能于系列⽅法相同,都是启动⼀个进程。
主要区别是:ProcessBuilder是可以更好控制启动的进程,且可以重⽤;但是exec⽅法没有这种效果;
ProcessBuilder是从1.5加进来的,⽽exec系列⽅法是从1.0开始就有的,后续版本不断的重载这个⽅法,到了1.5已经有6个之多。
但是,官⽅的api没有任何⽂档说明这个两个区别,我想主要的是OO的思想,导致了这个新类的产⽣,功能上没什么变化
具体内容可以参见java5的api⽂档或者java in a nutshell
使⽤ProcessBuilder的例⼦
package net.java2000.util;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
public class TestProcessBuilder {
public static void main(String args[]) throws Exception {
ProcessBuilder builder = new ProcessBuilder("cmd", "/c", "dir");
builder.directory(new File("e:/"));
Process process = builder.start();
InputStream is = InputStream();
InputStreamReader isr = new InputStreamReader(is, "GBK");
BufferedReader br = new BufferedReader(isr);
String line;
System.out.printf("Output of running %s is:", String(args));
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
}
总结:
ProcessBuilder为进程提供了更多的控制,例如,可以设置当前⼯作⽬录,还可以改变环境参数。⽽Process的功能相对来说简单的多。
ProcessBuilder是⼀个final类,有两个带参数的构造⽅法,你可以通过构造⽅法来直接创建ProcessBuilder的对象。⽽ Process是⼀个抽象类,⼀般都通过()和ProcessBuilder.start()来间接创建其实例
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论