【问题标题】:Java: Run multiple shell commands?Java:运行多个 shell 命令?
【发布时间】:2011-09-15 00:23:03
【问题描述】:

好的。我一直在到处寻找如何在 java 的单个命令提示符下执行多个命令。我需要做的是这个,但不是在命令行中,在代码中。

执行:

cd C:/Android/SDK/platform-tools
adb install superuser.apk

..基本上我想从程序中运行 adb 命令!!!到目前为止,这是我的 java 代码:

MainProgram.java

public class MainProgram {
   public static void main(String[] args) {
      CMD shell = new CMD();
      shell.execute("cmd /K cd C:/Android/SDK/platform-tools"); //command 1
      shell.execute("cmd /C adb install vending.apk"); // command 2
   }
}

CMD.java

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class CMD {
CMD() {
}
// THIS METHOD IS WHERE THE PROBLEM IS
void execute(String command) {
    try
    {           
    Process p = Runtime.getRuntime().exec(command);

    BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));

    BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));

    // read the output from the command

    String s = null;        
    while ((s = stdInput.readLine()) != null) {
        System.out.println(s);
    }

    while ((s = stdError.readLine()) != null) {
        System.out.println(s);
    }
  }     
catch(Exception e){  
    e.printStackTrace();
}
}
}

所以会发生什么......我可以运行第一个命令,但是 cmd 终止,当我执行第二个命令时,会创建一个新的 cmd,因此我收到一个错误,因为我不在正确的目录中。我尝试了一个字符串命令“cmd /C cd C:/blablabla /C adb remount”,但它只是冻结了......

本质上,命令 1 被执行并终止,然后命令 2 被执行并终止。我希望它是这样的:执行命令 1,执行命令 2,终止。

基本上我是在问如何在一个命令提示符下连续运行这两个命令???

我的最终目标是拥有一个带有一堆按钮的 JFrame,这些按钮在单击时会执行不同的 adb 命令。

【问题讨论】:

    标签: java android shell adb command-prompt


    【解决方案1】:

    最简单的方法是制作一个批处理文件,然后从程序中调用它 当然你可以说

    C:/Android/SDK/platform-tools/adb install superuser.apk
    

    直接命名就不需要cd到文件

    虽然您正在寻找的内容已经在 ddms.bat 中制作,它提供了到 adb 的完整可视链接

    【讨论】:

    • 感谢您让我知道“C:/Android/SDK/platform-tools/adb install superuser.apk”...这几乎解决了问题。干得好!
    【解决方案2】:

    创建文件为something.bat,并将内容设置为:

    cd C:/Android/SDK/platform-tools
    adb install superuser.apk
    

    然后调用:

    Process p = Runtime.getRuntime().exec("something.bat");
    

    bat 文件中的所有命令都被执行。

    【讨论】: