2009-10-20 10 views
0

Je reçois une erreur bizarre ("Le processus a essayé d'écrire sur un tube inexistant.") Si j'arrête de lire à partir d'une entrée canalisée depuis un programme qui fonctionne bien pour une entrée non canalisée. Comment puis-je éviter de provoquer cette erreur?Java: traiter correctement les tubes comme stdin

code:

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); 
     } 
    } 
} 

sortie d'exécution (testfile.txt est juste un grand fichier texte avec plus de 10 lignes):

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

Le problème est que votre système d'exploitation utilise des barres obliques inverses comme séparateur de chemin d'accès. (Plus directement, que vous utilisez Windows.) – AJMansfield

Répondre

2

L'erreur vient de votre shell de commande, pas de le programme Java. Il se plaint parce que "type" essaye toujours d'écrire dans sa sortie, mais ce tuyau a été brusquement fermé lorsque le programme Java s'est terminé.

+0

alors la meilleure façon de le gérer est ...? –

+0

Manipuler quoi? Quel est le problème? Est-ce juste que le message vous semble disgracieux? –

+0

Le comportement sans erreur semble être quelque chose que l'on devrait viser. – Photodeus