2016-05-09 34 views
0

我試圖做的Apache的公地EXEC一個MySQL轉儲打開cmd,然後我得到以下錯誤錯誤嘗試使用Apache的commons-EXEC罐子

異常線程「main」 java.io. IOException:無法運行程序 「cmd.exe \ c」(在目錄「。」中):CreateProcess error = 2,系統 找不到在 處指定的文件java.lang.ProcessBuilder.start(ProcessBuilder.java:470)在 java.lang.Runtime.exec(Runtime.java:593)at org.apache.commons.exec.launcher.Java13CommandLauncher.exec(Java13CommandLauncher.java:61) at org.apa che.commons.exec.DefaultExecutor.launch(DefaultExecutor.java:279) 在 org.apache.commons.exec.DefaultExecutor.executeInternal(DefaultExecutor.java:336) 在 org.apache.commons.exec.DefaultExecutor。執行(DefaultExecutor.java:166) 在 org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:153) 在 com.etq.e2mc.platform.windows.WindowsProcess.execCommons(WindowsProcess.java: 87) at com.etq.e2mc.platform.windows.WindowsProcess.main(WindowsProcess.java:79) 導致:java.io.IOException:CreateProcess錯誤= 2,系統 無法找到在java中指定的文件.lang.ProcessImpl.create(原生(ProcessImpl.java:177)at java.lang.ProcessImpl.start(ProcessImpl.java:28)at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)。在java.lang.ProcessImpl中的方法(ProcessImpl.java:177) ..更多

這是我使用的代碼,它非常簡單直接,但我不明白爲什麼它不調用cmd(注:嘗試直接調用mysql轉儲沒有cmd和我得到同樣的錯誤類型),希望得到任何幫助

public static void main(String[] args) throws Exception { 
     execCommons(); 
    } 

    public static void execCommons() throws ExecuteException, IOException { 
     CommandLine cmd = new CommandLine("cmd.exe /c"); 
     cmd.addArguments("mysqldump"); 
     cmd.addArguments(new String[] { "-u", "root", " -P", "3316", " -h", "localhost", " -A", ">"}); 
     cmd.addArguments("\"G:\\test.sql \"" , false); 
     new DefaultExecutor().execute(cmd); 

    } 
+1

你可以從'Run'啓動'cmd'嗎?哪個版本的Windows?是'PATH'變量中的'cmd'位置? –

+0

@SabirKhan一切從任何地方運行良好,mysqld轉儲添加到PATH,我可以打開CMD,從運行mysqldump就好! – user1

回答

1

出於某種原因公地高管似乎並不喜歡有命令的措辭,因爲它在這個問題(初始化CommandLine"cmd.exe /c"),一切似乎它改寫爲以下

後,工作得很好
public static void main(String[] args) throws Exception { 
     execCommons(); 
    } 

    public static void execCommons() throws ExecuteException, IOException { 
     CommandLine cmd = new CommandLine("cmd.exe "); 
     cmd.addArgument("/c"); 
     String command = "mysqldump " + "-u" + "root" + " -P" + "3316" + " -h" + "localhost" + " -A >" + "\"G:\\test.sql \""; 
     cmd.addArgument(command,false); 
     new DefaultExecutor().execute(cmd);  
    } 

我不知道爲什麼它的工作方式是這樣的,因爲在文檔中沒有任何說明,但是爲了幫助某人而在此處留下此處。但是如果有人有任何想法,請告訴

0

從(平原)的Java,Windows中執行外部程序:

Process p = Runtime.getRuntime().exec("cmd /c start /wait \"title\" \""+exe_path_and_other_parameters+"\""); 
p.waitFor(); 
+0

我試過這種方法,它永遠在等待,甚至從不執行轉儲,這就是爲什麼我嘗試使用apache commoons-exec – user1

+0

如果您不需要讀取程序中的輸出,也可以刪除.waitFor()。或者寫一個.bat(用echo-es)並且調用那個。無論如何,這應該工作...你確定手動啓動mysqldump工作正常嗎? – Exceptyon

+0

我確定它工作正常,並且無論如果我添加waitfor或不是mysql轉儲只是從未執行使用您提到的方法 – user1