Java和Runtime.getRuntime()。exec(String cmd)

时间:2013-06-19 15:56:21

标签: java linux terminal openssl

我正在尝试编写一个程序,必须在linux终端中执行相同的代码:

openssl req -passout pass:abc -subj /C=US/ST=IL/L=Chicago/O=IBM          Corporation/OU=IBM Software Group/CN=John Smith/emailAddress=smith@abc.ibm.com -new > johnsmith.cert.csr

在终端中它工作正常,但在Java中却没有。 我尝试这样的事情,但没有结果。

String[] cmd = { "openssl", "req -passout pass:abc -subj", "/C=US/ST=IL/L=Chicago/O=IBM          Corporation/OU=IBM Software Group/CN=John Smith/emailAddress=smith@abc.ibm.com", "-new > johnsmith.cert.csr" };
Runtime.getRuntime().exec(cmd);

你能解释我,我想念的是什么。谢谢你。 祝福安德烈

1 个答案:

答案 0 :(得分:1)

您错过了流重定向>是shell的功能,此处不存在。

您可以使用/bin/sh -c添加命令,也可以使用java:

重定向输出
Process proc = Runtime.getRuntime().exec(cmd);
InputStream in = proc.setOutputStream();
OutputStream out = new FileOutputStream("johnsmith.cert.csr");
int b;
while( (b = in.read()) != -1) {
   out.write(b);
}
out.flush();
out.close();

现在您可以从命令行中删除"> johnsmith.cert.csr"。我个人更喜欢这个解决方案。