BPMN中存在由系统执行的脚本任务,shell脚本任务也是该系统任务脚本中的一种,利用的也是由java执行shell脚本。
代码中的ProcessBuilder类,为java.lang.ProcessBuilder。
当然,也可以用java.lang.Runtime类的exec()方法执行shell脚本。
1 package com.alphajuns;
2
3 import org.junit.Test;
4
5 import java.io.*;
6 import java.util.ArrayList;
7 import java.util.List;
8
9 public class CMDCommandTest {
10
11 @Test
12 public void run() throws IOException {
13 // 创建命令集合
14 List<String> commandList = new ArrayList<String>();
15 commandList.add("cmd");
16 commandList.add("/c"); // 执行结束后关闭
17 commandList.add("echo");
18 commandList.add("hello");
19 commandList.add("cmd");
20 // ProcessBuilder是一个用于创建操作系统进程的类,它的start()方法用于启动一个进行
21 ProcessBuilder processBuilder = new ProcessBuilder(commandList);
22 // 启动进程
23 Process process = processBuilder.start();
24 // 解析输出
25 String result = convertStreamToStr(process.getInputStream());
26 System.out.println(result);
27 }
28
29 public String convertStreamToStr(InputStream is) throws IOException {
30 if (is != null) {
31 Writer writer = new StringWriter();
32 char[] buffer = new char[1024];
33 try {
34 Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
35 int n;
36 while ((n = reader.read(buffer)) != -1) {
37 writer.write(buffer, 0, n);
38 }
39 } catch (UnsupportedEncodingException e) {
40 e.printStackTrace();
41 } catch (IOException e) {
42 e.printStackTrace();
43 } finally {
44 is.close();
45 }
46 return writer.toString();
47 } else {
48 return "";
49 }
50 }
51 }
附上Junit测试结果