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