通过Java在unix中运行命令行

通过Java在unix中运行命令行,java,shell,unix,command-line,Java,Shell,Unix,Command Line,我有一些问题。当我运行命令时: openssl md5 "./build/outputs/apk/myApp.apk" 我得到了我需要的结果,所以openssl工作得很好。 还有我的Java代码: String md5_cmd = "openssl md5 \"./build/outputs/apk/myApp.apk\""; String md5Str = obj.executeCommand(md5_cmd); String whichCmd = obj.executeCommand("

我有一些问题。当我运行命令时:

openssl md5 "./build/outputs/apk/myApp.apk"
我得到了我需要的结果,所以openssl工作得很好。 还有我的Java代码:

String md5_cmd = "openssl md5 \"./build/outputs/apk/myApp.apk\"";

String md5Str = obj.executeCommand(md5_cmd);
String whichCmd = obj.executeCommand("which openssl"); //For testing executeCommand

 System.out.println(md5Str); //Not prints anything  
 System.out.println(whichCmd); //Prints the result just Fine    

private String executeCommand(String command) {

    StringBuffer output = new StringBuffer();

    Process p;
    try {
        p = Runtime.getRuntime().exec(command);
        p.waitFor();
        BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));

                    String line = "";           
        while ((line = reader.readLine())!= null) {
            output.append(line);
        }

    } catch (Exception e) {
        e.printStackTrace();
    }

    return output.toString();

}

因此,带有“md5_cmd”的第一个命令不显示任何输出,尽管如果我直接通过命令行运行它,它是OK的。带有“whichCmd”的第二个命令按预期工作。你能提出建议吗

而不是使用单个字符串运行命令

String md5_cmd = "openssl md5 \"./build/outputs/apk/myApp.apk\"";
带有参数的命令应使用字符串[]运行

String[] md5_cmd = {"openssl", "md5", "./build/outputs/apk/myApp.apk"}; 

不适用于
Runtime.getRuntime().exec
请查看源代码。或者,如果需要,将javadoc转换为另一种方法—更准确地说,
命令
字符串使用由call new StringTokenizer(命令)创建的aStringTokenizer分解为标记,而无需进一步修改字符类别。然后,标记器生成的标记将以相同的顺序放置在新的字符串数组cmdarray中。请注意,此代码在Windows下运行良好,但在UNIX上不起作用