2017-07-28 3 views
0

J'écris un programme Java qui exécute un fichier cmd à un moment donné. Les deux sont dans le même répertoire. J'utilise ProcessBuilder, car il est plus flexible. Cependant quand je lance ce code, il échoue:Java exécuter le fichier cmd échoue

String current_directory = System.getProperty("user.dir"); 

ProcessBuilder builder=new ProcessBuilder(current_directory+"\\"+ "myCmdFile.cmd"); 
builder.directory(new File(current_directory)); 
File log = new File("log.txt"); 
builder.redirectErrorStream(true); 
builder.redirectOutput(Redirect.appendTo(log)); 
Process process=builder.start(); 
process.waitFor(); 
System.out.println("CMD file executed"); 

Je reçois cette exception:

java.io.IOException: Cannot run program "C:\test\myCmdFile.cmd" (in directory "C:\test"): No such file or directory 
    at java.lang.ProcessBuilder.start(Unknown Source) 
    at org.java.test.executeCmdFile(MyMainClass.java:189) 
    at org.java.test.main(MyMainClass.java:70) 
Caused by: java.io.IOException: No such file or directory 
    at java.lang.ProcessImpl.openForAtomicAppend(Native Method) 
    at java.lang.ProcessImpl.newFileOutputStream(Unknown Source) 
    at java.lang.ProcessImpl.start(Unknown Source) 
    ... 3 more 

Cependant, quand je commente ces lignes que cela fonctionne:

ProcessBuilder builder=new ProcessBuilder(current_directory+"\\"+ 
    "myCmdFile.cmd"); 
    //builder.directory(new File(current_directory)); 
    //File log = new File("log.txt"); 
    // builder.redirectErrorStream(true); 
    // builder.redirectOutput(Redirect.appendTo(log)); 
    Process process=builder.start(); 
    process.waitFor(); 
    System.out.println("CMD file executed"); 

J'ai besoin ces lignes, puisque je veux avoir des messages de journal.

+0

Est-ce que current_directory contient un chemin absolu ? –

+0

@Alexander ouais, sry, j'ai oublié cette ligne (j'ai édité ma question). – Norbert94

+0

Désolé, on dirait que j'ai besoin d'un café. – GhostCat

Répondre

0

J'ai trouvé mon erreur ... il était un code one..This stupide fonctionne réellement:

String current_directory = System.getProperty("user.dir"); 

ProcessBuilder builder=new ProcessBuilder(current_directory+"\\"+ "myCmdFile.cmd"); 
builder.directory(new File(current_directory)); 
File log = new File("log.txt"); 
builder.redirectErrorStream(true); 
builder.redirectOutput(Redirect.appendTo(log)); 
Process process=builder.start(); 
process.waitFor(); 
System.out.println("CMD file executed"); 

Le problème était cette ligne:

File log = new File("log.txt"); 

Dans mon environnement de production, il a été long chemin (ce qui était faux), mais à des fins de démonstration, je l'ai changé, avant que j'ai posté la question ici. Je pensais que le problème était lié au fichier cmd l'exception m'a dit que tout le temps ... maintenant, après avoir donné un chemin correct pour le fichier journal, il fonctionne .. tout le monde