2015-04-15 7 views
1

Мне нужно выполнить некоторую строку в моей программе java. Например, я хочу, чтобы перейти в каталог, а затем создать папку в нем, как это:Выполнение нескольких команд линии в Java-программе

cd C:\\Users\\qi11091\\Documents\\TITAN_Command_Line\\FirstTest 
mkdir toto 

Мой probem, что я могу сделать первую команду, она работает, но я не знаю, как это сделать вторая команда в моей программе.

Вот мой код

public void TtcnToC(String path){ 
    System.out.println("Début du programme"); 
    try{ 
     System.out.println("Path target verification: "+path); 

     String[] mkdir = {"cmd.exe", "/c","cd C:\\Users\\qi11091\\Documents\\TITAN_Command_Line\\FirstTest", "mkdir titi"}; 
     String[] mkdir1 = {"cmd.exe", "/c","cd "+ path}; 
     Runtime runtime = Runtime.getRuntime(); 
     Process process = runtime.exec(mkdir1); 

     //Process process1 = runtime.exec(mkdir1); 
     //Process process2 = runtime.exec(mkdir2); 

     BufferedReader output = getOutput(process); 
     BufferedReader error = getError(process); 
     String ligne = ""; 

     while ((ligne = output.readLine()) != null) { 
      System.out.println(ligne); 
     } 

     while ((ligne = error.readLine()) != null) { 
      System.out.println(ligne); 
     } 

     System.out.println("in the shell"); 
     process.waitFor(); 
    } 
+0

Что именно вы используете Process и runtime для всего этого? В классе File есть все необходимое для создания новых папок и т. Д. – Stultuske

+0

Это просто пример, поэтому я могу понять, как работать с командной строкой в ​​Java-программе. Мне просто нужно знать, как писать несколько строк в java-программе, потому что мне нужно будет писать другие команды, а не создавать папку. – Anatch

ответ

1

Чтобы выполнить несколько команд подряд вы можете выполнить их в один используя синтаксис, используемый командной строкой для выполнения нескольких команд в одной строке.

Вы можете создать частный метод, который сцепляет все эти команды в одну команду, CMD поймет:

private String combineCommands(String[] commands){ 
    String result = ""; 
    for(String command: commands){ 
     result = result + command + " && "; 
    } 
    if(result.length() > 0){ 
     result = result.subString(0,result.length()-3); // We remove the last && here. 
    } 
    return result; 
} 

Таким образом, вы передаёте массив строк, например:

String[] myCommands = {"cd C:\\Users\\qi11091\\Documents\\TITAN_Command_Line\\FirstTest", "mkdir titi"}; 

Тогда вы можете просто назвать свое исполнение, как и раньше:

String[] mkdir1 = {"cmd.exe", "/c",combineCommands(myCommands)}; 
Runtime runtime = Runtime.getRuntime(); 
Process process = runtime.exec(mkdir1); 

Таким образом, вы d не нужно звонить в Runtime для каждой команды, которую вы хотите выполнить.

+0

Большое вам спасибо! – Anatch

0

Просто для образца, вы можете взглянуть на код ниже,

try { 

     String[] command = new String[2]; 
     command[0]="cmd /c dir"; 
     command[1]="cmd /c dir/w"; 

     Process p; 

     for (int i = 0; i < command.length; i++) { 
      String cmd = command[i]; 
      p=Runtime.getRuntime().exec(cmd); 
      p.waitFor();  

      BufferedReader reader=new BufferedReader(new InputStreamReader(p.getInputStream())); 
      String line=reader.readLine(); 
      while(line!=null) 
      { 
       System.out.println(line); 
       line=reader.readLine(); 
      } 
     } 

    } catch(IOException e1) { 
     e1.printStackTrace(); 
    } 
    catch(InterruptedException e2) { 
     e2.printStackTrace(); 
    } 

    System.out.println("Done"); 
} 
Смежные вопросы