ProcessBuilder 没有输出正确的输出

ProcessBuilder not outputting the correct output

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();
   }
}

所以我有以下代码。读取文件并计算目标词的出现次数并打印计数。但是当我 运行 这个函数时,我没有看到任何东西被打印出来。

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

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

为了完整起见,您还必须检查错误流。

正如 Andreas 所注意到的,尝试使用资源会更好。