代码之家  ›  专栏  ›  技术社区  ›  Aditya

ProcessBuilder未输出正确的输出

  •  0
  • Aditya  · 技术社区  · 6 年前
    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 回复  |  直到 6 年前
        1
  •  0
  •   Aubin    6 年前

    您的代码要求Java等到子进程 sh

    不要使用 p.waitFor(); 直到你读到输出。进程结束时,输出流将关闭。

    为了完成,您还必须检查错误流。