window:
1.執行jar程序:
String cmd = "cmd /c java -jar test.jar $1 $2"; $1, $2爲傳入參數。
2.mysql導出數據:
String[] cmds = new String[3];
cmds[0] = "cmd /c mysql -uroot -p123456";
cmds[1] = "use database";
cmds[2] = "source d:/abc.sql";
3.mysql導入數據:
String cmd = "mysqldump -uroot -p123456 database --skip-lock-tables table > d:/table.sql";
linux:
1.執行jar程序
String cmd = "java -jar test.jar $1 $2"; $1, $2爲傳入參數。
2.mysql導出數據:
String[] cmds = new String[3];
cmds[0] = "mysql -uroot -p123456";
cmds[1] = "use database";
cmds[2] = "source /data/abc.sql";
3.mysql導入數據:
String cmd = "mysqldump -uroot -p123456 database --skip-lock-tables table -r /data/table.sql";
注意這裏不能像在window裏一樣用>重定向符,linux環境中會解析不到,所以最好統一都用 -r 參數。
1跟3的命令只需要獲取Runtime後直接執行該條命令就行:
Process process = Runtime.getRuntime().exec(cmd);
而2有多條命令,則要逐條執行:
Process process = Runtime.getRuntime().exec(cmd[0]);
OutputStreamWriter writer = new OutputStreamWriter(process.getOutputStream());
writer.write(cmds[1] + "\r\n" + cmds[2]);
writer.flush();
writer.close();
process.waitFor();是個阻塞進程。要等子進程執行完以後纔會往下執行主進程的代碼。
process.exitValue();是個非阻塞進程。
兩個方法都會得到一個int類型返回值,0代表子進程正常結束,1代表有異常終止。
以上命令中java, mysql, mysqldump都要加入了環境變量中才能直接使用,否則就要寫絕對地址.
linux中可以通過env命令查看用戶已經設置的環境變量,或者在/etc/profile中加入環境變量export JAVA_HOME=/usr/local/jdk1.6.0_45 後重新讀取一次環境變量source /etc/profile