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" });
是的,注意到這個解決方案。但認爲這可能是不同的,因爲它是重定向輸出而不是輸入? – Skovly
這並沒有什麼不同,因爲重定向輸出和輸入都是由shell處理的,所以您必須手動執行(或明確調用shell)才能使其工作。顯式地調用shell實際上是你的Windows解決方案(cmd.exe是shell)。 –
謝謝,Joachim。我將它改爲使用unix shell(bin/sh),就像windows解決方案一樣。完美工作。謝謝! – Skovly