IT虾米网

利用java执行shell脚本

leader 2021年04月17日 编程语言 5096 0

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

代码中的ProcessBuilder类,为java.lang.ProcessBuilder。可以参考javaAPI或者博客IT虾米网

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


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!