2016-05-31 2 views
2

Так что я сейчас пытаюсь добавить Security Certificate, который у меня есть на Java Keystore. Я могу сделать это легко на cmd, используя значение, хранящееся внутри String temp, но я хочу, чтобы это можно было сделать в моем Java-коде. Я использую следующий код, чтобы сделать это, но я получаю следующую ошибку The filename, directory name, or volume label syntax is incorrect.Неверное имя файла, имя каталога или тома. Java

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

Чтобы отладить проблему, предоставьте полный путь, заменив «.. \\ .. \\ bin \\ keytool» и выполнив программу. Если в пути к директории keytool есть пробел, cmd также не удался. – notionquest

ответ

5
  • использование ProcessBuilder.directory установить рабочий каталог (как в том месте, где Keytool есть), а затем
  • в использовании конструктора keytool как команды, а затем аргументы этой программы отдельно

класс ProcessBuilder имеет хороший пример

+0

отлично, спасибо за помощь. – noobCoder

1
String temp = "..\\..\\bin\\keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias RandomKeyName -file C:\\Users\\Chris\\Desktop\\RandomKey.crt"; 

На самом деле это не одна команда, а целый список команд. Добавьте отдельную запись массива для каждого из флагов, и вы должны быть в порядке. Кроме того, я не думаю, что вам нужно обернуть это внутри вызова cmd.exe.

+1

отлично, спасибо за помощь. – noobCoder

Смежные вопросы