2009-10-20 5 views
0

Я получаю странную ошибку («Процесс пытался записать на несуществующий канал»), если я перестаю читать из ввода с канала, из программы, которая отлично работает для не-подключенного ввода. Как я могу избежать возникновения этой ошибки?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. 
+0

Проблема в том, что ваша ОС использует обратную косую черту в качестве разделителя пути к файлу. (Более непосредственно, что вы используете Windows.) – AJMansfield

ответ

2

ошибка происходит из командной оболочки, а не из Java-программу. Он жалуется, потому что «тип» все еще пытается записать его вывод, но этот канал был внезапно закрыт, когда программа Java завершилась.

+0

, поэтому лучший способ справиться с этим - это ...? –

+0

Обращайтесь с чем? В чем проблема? Это просто сообщение кажется вам неприглядным? –

+0

Ошибка бесплатного поведения звучит как то, к чему нужно стремиться. – Photodeus

Смежные вопросы