通过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上不起作用