[英]passing Strings to a command line program from java
我目前正在编写一个Java程序,该程序可以自动执行Android应用程序的日常工作。 该程序的主要任务是通过Windows命令行运行服务器外部工具,只要我不必与调用的cmdline工具进行交互,它就可以正常工作。 我在使用“ keytool”创建密钥库时遇到问题。 在执行“ keytool”期间,命令行会提示我输入我的姓名,密码等。是否可以从文件中读取此信息? 我不知道是否有帮助,但这是处理命令执行的类。
private static void executeCmd(String command, PrintStream output) throws IOException, InterruptedException {
final Runtime r = Runtime.getRuntime();
final Process p = r.exec(command);
java.util.List<StreamWriter> reader = Arrays.asList(
new StreamWriter(p.getInputStream(), output).startAndGet(),
new StreamWriter(p.getErrorStream(), output).startAndGet()
);
if (output != null)
output.println("waiting for: " + command);
p.waitFor();
reader.forEach(StreamWriter::joinSilent);
if (output != null)
output.println("waiting done");
}
检查keytool-帮助。 您可以在keytool参数本身中传递别名和密码。 例如
keytool -list -alias TEST -keystore "C:\java\jdk\jre\lib\security\cacerts" -storepass changeit
检查来自oracle的链接以获取更多示例
您可以为命令准备输入文件,并将其传递到标准输入。 可以使用ProcessBuilder代替Runtime.exec
来完成:
final Process process = new ProcessBuilder(command)
.redirectInput(new File(standardInputFileName))
.start();
但是,实际上,您不需要输入重定向即可使用keytool
。 您可以将所有必需的信息作为命令行参数传递。 例如,以下是生成新的RSA密钥的命令行(为清晰起见,在各行中都加了一行):
keytool -genkeypair
-keystore "<key store file>"
-alias "<key alias>"
-keyalg "RSA"
-keypass "<key password>"
-storepass "<store password>"
-dname "<distingushed name>"
可分辨名称具有格式的位置(再次为清晰起见,以行分隔)
CN=<common name>,
OU=<orgamization unit>,
O=<organization>,
L=<location>,
ST=<state>,
C=<two-letter country code>
在没有用户交互的情况下生成新密钥的工作示例:
keytool -genkeypair -keystore my.store -alias my.key -keyalg RSA -storepass storage-pass -keypass key-pass -dname "CN=Nobody, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=US"
有关更多信息,请参见keytool文档页面 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.