我得到一个奇怪的错误(“进程试图写入一个不存在的管道。”)如果我停止从管道输入读取,从一个适用于非管道输入的程序。如何避免导致此错误?
代码:
package com.example.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class PipeTest {
static public void main(String[] args) throws IOException
{
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
int i = 0;
while (i < 10)
{
String s = r.readLine();
if (s == null)
break;
++i;
System.out.println(i);
}
}
}
运行时输出(testfile.txt只是一个包含10行以上的大文本文件):
C:\proj\java\test-pipe\bin>java com.example.test.PipeTest < ../testfile.txt
1
2
3
4
5
6
7
8
9
10
C:\proj\java\test-pipe\bin>type ..\testfile.txt | java com.example.test.PipeTest
1
2
3
4
5
6
7
8
9
10
The process tried to write to a nonexistent pipe.
答案 0 :(得分:2)
错误来自您的命令shell,而不是来自Java程序。它抱怨,因为“type”仍在尝试写入其输出,但是当Java程序终止时,该管道突然关闭。