利用java执行shell脚本

BPMN中存在由系统执行的脚本任务,shell脚本任务也是该系统任务脚本中的一种,利用的也是由java执行shell脚本。

代码中的ProcessBuilder类,为java.lang.ProcessBuilder。可以参考javaAPI或者博客https://blog.csdn.net/u013256816/article/details/54603910

当然,也可以用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测试结果

 

posted @ 2019-08-18 19:18  AlphaJunS  阅读(19245)  评论(0编辑  收藏  举报