2012-10-19 78 views
0

可能重複:
Redirection with Runtime.getRuntime().exec() doesn’t work調用Runtime.getRuntime()EXEC()在Java中與文件重定向

我試圖運行與Java在OS X中的SQL腳本啓動我的數據庫進行測試。我知道這不是執行此操作的首選方式,但這只是一個臨時解決方案。

我試過閱讀關於exec()函數,以及如何傳遞參數,但我根本無法使其工作。

我的代碼如下所示:

try { 
    Process p = Runtime.getRuntime().exec("/usr/local/mysql/bin/mysql -uroot dev_test <div/test_db.sql"); 

    p.waitFor(); 

    BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); 

    while ((line = input.readLine()) != null) {   
     System.out.println(line); 
    } 

    input.close(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

我也試着來傳遞參數的字符串數組,但沒有運氣。

我已經成功地使它成爲一個Windows機器上使用以下格式運行,但這樣它工作在OSX我不能改變它:

Process p = Runtime.getRuntime().exec(new String[] { "cmd", "/C", "mysql -u root dev_test < div\\test_db.sql" }); 
+0

是的,注意到這個解決方案。但認爲這可能是不同的,因爲它是重定向輸出而不是輸入? – Skovly

+1

這並沒有什麼不同,因爲重定向輸出和輸入都是由shell處理的,所以您必須手動執行(或明確調用shell)才能使其工作。顯式地調用shell實際上是你的Windows解決方案(cmd.exe是shell)。 –

+0

謝謝,Joachim。我將它改爲使用unix shell(bin/sh),就像windows解決方案一樣。完美工作。謝謝! – Skovly

回答

1

更改爲使用的UNIX shell代碼相反,就像在Windows解決方案中一樣。由此產生的代碼如下所示:

String [] cmd = {"/bin/sh" , "-c", "/usr/local/mysql/bin/mysql -u root dev_test <div/test_db.sql"}; 
Process p = Runtime.getRuntime().exec(cmd); 

謝謝,Joachim!對不起,轉發。

相關問題