Runtime.exec()方法重定向<>|的使用

我在使用Runtime执行命令时,会用到重定向或管道的符号,例如备份mysql数据库

mysqldump -uuser -p database > /opt/test.sql

用Runtime.exec(String cmd)命令执行,会报错,要不然就是process.waitfor()返回1,不是0,通过查找资料发现使用这个方法时,不能有“<”"">"|"这几个符号,否则会出错,但是我就是要用,怎么办?

方法一:个别符号可以替换

">"符号可以直接替换为"-r"

例如原来的代码是

String cmd="mysqldump -uuser -p database > /opt/test.sql"
//执行不通过
Runtime.getRuntime().exec(cmd);

把">"替换为-r的代码是

String cmd="mysqldump -uuser -p database -r /opt/test.sql"
//执行通过
Runtime.getRuntime().exec(cmd);

其他的暂时我也没有找到什么符号可以替换。

方法二:推荐均适用

使用exec的其他方法

public Process exec(String [] cmdArray)

这里面参数传的是一个数组,数组的前两个值跟系统有关,可以认为是固定的,第3个值就是你要执行的命令,具体为

windows端,用cmd执行

String cmd="mysqldump -uuser -p database > /opt/test.sql"
//执行通过
Runtime.getRuntime().exec(new String[]{"cmd","/c",cmd});

linux端,用/bin/bash执行

String cmd="mysqldump -uuser -p database > /opt/test.sql"
//执行通过
Runtime.getRuntime().exec(new String[]{"/bin/bash","-c",cmd});

如果你要在windows和linux端都用到这个方法,那就获取系统名判断一下

String cmd="mysqldump -uuser -p database > /opt/test.sql"
String os=System.getProperty("os.name").toLowerCase();
if(os.contains("windows")
    Runtime.getRuntime().exec(new String[]{"cmd","/c",cmd});
else if(os.contains("linux"))
    Runtime.getRuntime().exec(new String[]{"/bin/bash","-c",cmd});

//含有><|符号均可以执行通过

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值