2017-07-28 69 views
0

我正在寫一個java程序,它在某個時候執行一個cmd文件。 兩者都在相同的目錄中。java執行cmd文件失敗

我使用ProcessBuilder,因爲它更靈活。 然而,當我運行此代碼失敗:

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"); 

我得到這個異常:

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 

然而,當我註釋掉這些行比它的工作原理:

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"); 

我需要這些行,因爲我想有日誌消息。

+0

current_directory是否包含絕對路徑? –

+0

@亞歷山大是啊,斯里,忘了那條線(我編輯了我的問題)。 – Norbert94

+0

對不起,看起來我需要一杯咖啡。 – GhostCat

回答

0

我發現我的錯誤......這是一個愚蠢的one..This代碼實際工作:

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"); 

問題是這一行:

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

在我的生產環境,這是一個很長的路徑(這是錯誤的),但是爲了演示的目的,我改變了它,在我發佈這個問題之前。我認爲這個問題與cmd文件有關,例外告訴我整個時間...現在我給出了一個正確的日誌文件路徑它工作..thx大家