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.
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