从java运行grep命令后获取错误

问题描述:

我正在通过我的Java程序运行grep命令。在命令行上运行grep有时会在类型stderr上写入错误:No such file or directory。我想在我的Java程序中检测到由于通过程序执行grep命令而发生此错误。我怎样才能实现这个目标?这是我到目前为止写的:从java运行grep命令后获取错误

Runtime rt = Runtime.getRuntime(); 
    String[] cmd = {"/bin/sh", "-c", "grep -c 'Search_String' /path/to/file(s)/being/searched"}; 
    Process proc = rt.exec(cmd); 
    BufferedReader is = new BufferedReader(new 
    InputStreamReader(proc.getInputStream())); 
    String line; 
    while ((line = is.readLine()) != null) { 
     System.out.println(line); 
    } 
+1

任何原因你不能检查该文件存在之前,将其传递给grep? –

+1

检查exitValue。 Grep成功返回0。如果它返回一个非零值,你将不得不解析输出。 – Dakoda

+0

@JoeC我可以检查,但这会让我感觉更舒适,当我试图对很多文件运行命令 –

您可以检测到进程是否返回错误;如@Dakoda提到,exitValue()不会有出射值,直到该过程结束,但使用waitFor()将阻塞,直到该处理结束并返回退出值:

int rv = rt.waitFor(); 
if (rv != 0) { ... } 

错误输出通常是上stderr而非stdout,所以要阅读你会使用的错误:

BufferedReader is = new BufferedReader(
    new InputStreamReader(proc.getErrorStream()));