使用Java运行Linux命令时出现问题?

时间:2015-10-07 21:33:18

标签: java linux

我正在使用Java运行命令并且没有输出。

Process p;
Runtime run = Runtime.getRuntime();  
    String s1 = "queryData 1005017 --format '\"%s" scope'";

    System.out.println("Command is " + s1);


    try {  

        p = run.exec(s1);  
        BufferedReader br = new BufferedReader(
                new InputStreamReader(p.getInputStream()));
            while ((s = br.readLine()) != null)
                System.out.println("line: " + s);
        p.getErrorStream();  
        p.waitFor();

    }  

虽然相同的命令---> queryData 1005017 --format'“%s”scope'运行没有任何问题。想知道我在处理双引号或%符号时是否遗漏了任何东西?

2 个答案:

答案 0 :(得分:2)

你没有正确地逃避内部引用:

String s1 = "queryData 1005017 --format '\"%s" scope'";
            ^--start java string             ^--end java string
                                               ^^^^^ what's this mean to java?

你可能想要

String s1 = "queryData 1005017 --format '\"%s\" scope'";
                                             ^--note this

代替。

答案 1 :(得分:2)

尝试不要使用字符串从Java启动进程。正确的方法是使用ProcessBuilder

p = new ProcessBuilder(Arrays.asList(
    "queryData", "1005017", "--format", "\"%s\" scope")).start();