Skip to content

Commit d529995

Browse files
committed
优化字符串命令
1 parent b09d734 commit d529995

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

AndroidExecLibrary/src/main/java/com/excellence/exec/Commander.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,17 @@ public static CommandTask addTask(@NonNull String[] command, IListener listener)
5959
return addTask(Arrays.asList(command), listener);
6060
}
6161

62+
/**
63+
* 字符串命令,参数请以空格分隔
64+
*
65+
* @param command
66+
* @param listener
67+
* @return
68+
*/
6269
public static CommandTask addTask(@NonNull String command, IListener listener) {
6370
checkCommander();
64-
return addTask(new String[]{command}, listener);
71+
String[] cmd = command.split(" ");
72+
return addTask(cmd, listener);
6573
}
6674

6775
public static CommandTask addUniqueTask(@NonNull String command, IListener listener) {

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,12 @@ process.getErrorStream()
5858

5959
```
6060
// 执行命令,重定向输出流
61-
Process process = new ProcessBuilder("command").redirectErrorStream(true).start();
61+
Process process = new ProcessBuilder("command").command("arg").redirectErrorStream(true).start();
6262
6363
// 不设置重定向,则正常输出、错误输出如同Runtime;
6464
// 设置了重定向后,正常输出、错误输出都统一读取process.getInputStream()
6565
```
6666

67+
**注意**
68+
69+
**ProcessBuilder.start() 和 Runtime.exec()传递的参数有所不同,Runtime.exec()可接受一个单独的字符串,这个字符串是通过空格来分隔可执行命令程序和参数的;也可以接受字符串数组参数。而ProcessBuilder的构造函数是一个字符串列表或者数组。列表中第一个参数是可执行命令程序,其他的是命令行执行是需要的参数。通过查看JDK源码可知,Runtime.exec最终是通过调用ProcessBuilder来真正执行操作的。**

0 commit comments

Comments
 (0)