ProcessBuilder无法输出正确的输出

时间:2018-11-12 20:03:42

标签: java processbuilder

private void printNumberOfRecords(){
   try {
      ProcessBuilder builder = new ProcessBuilder(
         "/bin/sh", "-c",
         "grep", "\"target-word\"", localFileName, "|", "wc", "-l");
      Process p = builder.start();
      p.waitFor();
      BufferedReader br=new BufferedReader(
         new InputStreamReader(
            p.getInputStream()));
      String line;
      while(( line = br.readLine()) != null ) {
         System.out.println(line);
      }
   }
   catch( Exception e ) {
      e.printStackTrace();
   }
}

所以我有以下代码。读取文件并计数目标单词的出现次数并打印计数。但是当我运行此功能时,我看不到任何打印内容。

1 个答案:

答案 0 :(得分:0)

您的代码要求Java等待子进程sh结束而不读取流。当缓冲区将满时,子进程将等待阻塞。

在阅读输出之前,请勿使用p.waitFor();。流程结束时,输出流将关闭。

为完成此操作,您还必须检查错误流。

正如安德里亚斯(Andreas)注意到的那样,尝试资源会更好。