getRuntime()。exec(String [])函数的行为不同于getRuntime()。exec(String)(Android)

时间:2019-06-19 00:14:10

标签: java android exec

正在尝试使用一些自定义数据(-p标志)调用ping。由于我需要传递参数,因此使用exec()重载来接受字符串数组似乎很直观。它一直失败,所以我尝试了与一个长字符串相同的精确输入,现在一切都很好。我不知道问题是什么,我已经多次检查了输入。

尝试弄乱字符串数组中的其他空格以排除因参数之间缺少空格而引起的任何问题。

String sPattern = StringUtils.bytesToHex(sData.getBytes());
sPattern = padHexString(sPattern);
sPattern = "-p " + sPattern.toLowerCase(); // "-p 3132372e302e302e31ffffffffffffff"

// this FAILS
Runtime.getRuntime().exec(new String[]{"/system/bin/ping",
                   "-c 1",
                    "-s 64",
                    sPattern,
                    sReportServer});  


// this WORKS
Runtime.getRuntime().exec("/system/bin/ping -c 1 -s 64 " + 
                          sPattern + " " + sReportServer);  

第一次调用失败,或者显示用法,或者给出错误消息“模式必须为十六进制数字”。是的。第二个电话工作正常。

两种方法都可以正常工作。

1 个答案:

答案 0 :(得分:0)

正如Carlos Heuberger指出的那样,在某些参数中我有空格,这导致调用失败。我的想法是将开关和关联的参数配对在同一字符串中,但这会使它被双引号引起来。

希望这可以为做相同事情的人节省一些时间:|