2016-05-31 11 views
2

Also versuche ich gerade eine Security Certificate hinzuzufügen, die ich auf Java Keystore habe. Ich kann dies leicht auf cmd mit dem Wert innerhalb der Zeichenfolge gespeichert temp, aber ich möchte dies in meinem Java-Code tun können. Ich verwende den folgenden Code, es zu tun, aber ich bekomme die folgenden Fehler The filename, directory name, or volume label syntax is incorrect.Der Dateiname, der Verzeichnisname oder die Laufwerkslabelsyntax sind falsch 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); 
    } 

Ich habe diesen Fehler nachgeschlagen und fand auf die folgende Seite der Fehler https://technet.microsoft.com/en-us/library/cc956689.aspx., Aber ich habe immer noch nicht in der Lage gewesen, um das Problem zu lösen. Ich weiß, dass es etwas Kleines ist, aber ich kann es einfach nicht sehen. Kann jemand das beheben?

+0

Nur um das Problem zu debuggen, geben Sie bitte den vollständigen Pfad ersetzen ".. \\ .. \\ bin \\ keytool" und führen Sie das Programm. Wenn der Verzeichnispfad zu keytool Platz enthält, würde der cmd ebenfalls fehlschlagen. – notionquest

Antwort

5
  • Verwendung ProcessBuilder.directory das Arbeitsverzeichnis (an der Stelle, wo die Keytools ist) zu setzen und dann
  • im Konstruktor keytool als Befehl und dann die Argumente für dieses Programm separat

die Klassen-Dokumentation der ProcessBuilder hat ein gutes Beispiel

+0

perfekt, danke für die Hilfe. – noobCoder

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

Dies ist eigentlich kein Befehl, sondern eine ganze Liste von Befehlen. Fügen Sie einen separaten Array-Eintrag für jede der Flags hinzu und Sie sollten in Ordnung sein. Außerdem glaube ich nicht, dass Sie dies in einen Aufruf von cmd.exe einbinden müssen.

+1

perfekt, danke für die Hilfe. – noobCoder

Verwandte Themen