Я получаю странную ошибку («Процесс пытался записать на несуществующий канал»), если я перестаю читать из ввода с канала, из программы, которая отлично работает для не-подключенного ввода. Как я могу избежать возникновения этой ошибки?Java: правильная работа с трубами как stdin
код:
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.
Проблема в том, что ваша ОС использует обратную косую черту в качестве разделителя пути к файлу. (Более непосредственно, что вы используете Windows.) – AJMansfield