我想写一个程序,必须在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);
你能给我解释一下我错过了什么吗?祝福Andrey
您忽略了一个事实,即流重定向>
是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"
。我个人更喜欢这个解决方案。