所以我现在正在尝试将Security Certificate
添加到Java Keystore
。我可以使用存储在String cmd
中的值在temp
上轻松完成此操作,但我希望能够在我的java代码中执行此操作。我使用以下代码执行此操作,但收到以下错误The filename, directory name, or volume label syntax is incorrect.
String java_Home = System.getProperty("java.home");
java_Home = java_Home + "\\lib\\security";
java_Home = java_Home.trim();
String temp = "..\\..\\bin\\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias RandomKeyName -file C:\\Users\\Chris\\Desktop\\RandomKey.crt";
temp = temp.trim();
String[] commands = {"cmd.exe", "/c", "cd " + java_Home, temp};
ProcessBuilder builder = new ProcessBuilder(commands);
builder.redirectErrorStream(true);
Process p = builder.start();
builder.command();
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (true) {
line = r.readLine();
if (line == null) {
break;
}
System.out.println(line);
}
我已查找此错误并在错误https://technet.microsoft.com/en-us/library/cc956689.aspx上找到了以下页面。但我仍然无法解决问题。我知道它有点小,但我无法看到它。有谁知道如何解决这个问题?
答案 0 :(得分:6)
keytool
作为命令,然后单独使用该程序的参数ProcessBuilder的课程文档有一个很好的例子
答案 1 :(得分:1)
String temp = "..\\..\\bin\\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias RandomKeyName -file C:\\Users\\Chris\\Desktop\\RandomKey.crt";
这实际上不是一个命令,而是一整套命令。 为每个标志添加一个单独的数组条目,你应该没问题。此外,我不认为您需要将此包装在cmd.exe的调用中。