2017-04-24 121 views
0

我正在通過我的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我可以檢查,但這會讓我感覺更舒適,當我試圖對很多文件運行命令 –

回答

1

您可以檢測到進程是否返回錯誤;如@Dakoda提到,exitValue()不會有出射值,直到該過程結束,但使用waitFor()將阻塞,直到該處理結束並返回退出值:

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

錯誤輸出通常是上stderr而非stdout,所以要閱讀你會使用的錯誤:

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