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();
}
}
所以我有以下代码。读取文件并计数目标单词的出现次数并打印计数。但是当我运行此功能时,我看不到任何打印内容。
答案 0 :(得分:0)
您的代码要求Java等待子进程sh
结束而不读取流。当缓冲区将满时,子进程将等待阻塞。
在阅读输出之前,请勿使用p.waitFor();
。流程结束时,输出流将关闭。
为完成此操作,您还必须检查错误流。
正如安德里亚斯(Andreas)注意到的那样,尝试资源会更好。