我正在尝试编写一个程序,它必须在 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);
你能解释一下我想念的东西吗?提前致谢。 最良好的祝愿安德烈
最佳答案
您忽略了流重定向 >
是此处不存在的 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"
。我个人更喜欢这个解决方案。
关于Java 和 Runtime.getRuntime().exec(String cmd),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17195839/