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 所注意到的,尝试使用资源会更好。
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 所注意到的,尝试使用资源会更好。