文件名,目录名或卷标语法是不正确的java

时间:2016-05-31 13:41:19

标签: java

所以我现在正在尝试将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上找到了以下页面。但我仍然无法解决问题。我知道它有点小,但我无法看到它。有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:6)

  • 使用ProcessBuilder.directory设置工作目录(到keytool所在的位置)然后
  • 在构造函数中使用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的调用中。