Java 在Linux上执行grep命令并捕获结果

Java 在Linux上执行grep命令并捕获结果,java,linux,jakarta-ee,grep,Java,Linux,Jakarta Ee,Grep,我试图使用以下java代码在linux上执行grep命令,但无法捕获输出。我的输出总是为空 Process p; String output = null; try { String command = "grep searchString filename.txt"; System.out.println("Running command: " + command); p = Runtim

我试图使用以下java代码在linux上执行grep命令,但无法捕获输出。我的输出总是为空

Process p;
        String output = null;
        try {
            String command = "grep searchString filename.txt";
            System.out.println("Running command: " + command);

            p = Runtime.getRuntime().exec(command);

            BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));

            if (null != output) {

                while ((output = br.readLine()) != null)
                    System.out.println(output);
            } 

            p.waitFor();
            System.out.println("exit: " + p.exitValue());
            p.destroy();
        } catch (Exception e) {
            e.printStackTrace();

    }
如何捕获输出?
是否有任何第三方库或更好的方法在linux上执行命令并捕获输出?

在执行if check时,尚未分配输出。更改代码,如下所示:

    Process p;
    String output = null;
    try {
        String command = "grep searchString filename.txt";
        System.out.println("Running command: " + command);

        p = Runtime.getRuntime().exec(command);
        p.waitFor();

        BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));

            while ((output = br.readLine()) != null) {
                System.out.println(output);
                // Process your output here
            }

        System.out.println("exit: " + p.exitValue());
        p.destroy();
    } catch (Exception e) {
        e.printStackTrace();

}

下一次@PM77-1可能重复,请在标记为重复之前花一秒钟阅读问题。OP的问题与执行系统命令无关。在分配任何值(除了
null
)之前,您说的是
if(null!=output){
)因此,由于此时
output
null
,因此您永远不会调用
readLine
。如果使用Eclipse之类的IDE,它会告诉您类似“此时此变量只能是
null
”在you
if
statement…@MarkoTopolnik-我链接的问题的公认答案正是OP需要的(不管问题本身).对不起,我没有正确地理解你..事实上我之前的代码也有一些业务逻辑代码..我现在删除了..但删除后我想.你的代码和我的代码看起来完全一样…请解释一下,如果我遗漏了什么…我必须尝试执行这个urs代码吗?不,我没有尝试过.但是很明显,如果块不能放在除了尝试删除
p.destroy()之外
并在处理后关闭
BufferedReader
实例。还要确保您的命令在shell上打印输出。此命令可能不会返回任何内容。是的…我在执行命令之前和运行同一命令时使用了sysout命令。它的打印输出在shell上,但不使用java程序…不确定出了什么问题:(查看一些示例,应该会有所帮助。