getRuntime.exec()无法读取字符串

时间:2013-06-03 06:40:32

标签: java

当我使用gammu和java创建smsGateway时,我遇到了这样的语法问题:

try {
        Process process = runtime.exec(pathGammu+" --config "+pathConfig+" TEXT phonenumber -text \'can i send?\' ");

        InputStream is = process.getInputStream();
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);

        String line;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
    } catch (IOException ex) {
        System.out.println("Error : " + ex.getMessage());
    }

当我运行该语法时,我有来自gammu的响应“什么是参数:我发送?”...... gammu假设“我可以发送吗?”作为命令......它应该是一个字符串...我很困惑

2 个答案:

答案 0 :(得分:3)

Runtime.exec不解析shell之类的参数。使用带有字符串数组的版本作为参数。

另见http://m.javaworld.com/jw-12-2000/jw-1229-traps.html

答案 1 :(得分:-1)

我想这里'的逃避是多余的,即你应该说

runtime.exec(pathGammu+" --config "+pathConfig+" TEXT phonenumber -text 'can i send?' ");

而不是

runtime.exec(pathGammu+" --config "+pathConfig+" TEXT phonenumber -text \'can i send?\' ");

虽然我没有尝试运行你的代码,但我认为这有机会运行,因为现在'在运行命令行时确实传递给了操作系统。否则它会被操作系统转义,而不是像您想象的那样通过Java转义。

但是我建议您使用ProcessBuilder来提供更方便,更真实的跨平台API来运行外部流程:

ProcessBuilder pb = new ProcessBuilder();
pb.command(pathGammu, "--config",  pathConfig, "TEXT", "phonenumber", "-text", "can i send?");
Process proc = pb.start();