2009-09-16 8 views
9

est ici un simple morceau de code:ligne de commande d'entrée de tuyau en Java

import java.io.*; 
public class Read { 
public static void main(String[] args) { 
    BufferedReader f = new BufferedReader(new InputStreamReader(System.in)); 
    while(true) 
    { 
    String x = null; 
    try{ 
    x = f.readLine(); 
    } 
    catch (IOException e) {e.printStackTrace();} 
    System.out.println(x); 
    } 
} 
} 

Je l'exécuter comme: java Lire < input.txt

Une fois que le input.txt est complètement canalisé dans le programme , x continue d'obtenir des valeurs nulles infinies. Pourquoi est-ce si? Y a-t-il un moyen par lequel je peux rendre le Standard In (Command Line) actif après que le fichier soit introduit dans le code? J'ai essayé de fermer le flux et de le rouvrir, ça ne marche pas. Réinitialiser etc aussi.

+0

Le code original a-t-il été modifié pour tenir compte de la réponse acceptée? Parce que cette réponse ne semble pas s'appliquer à ce code maintenant: le code ne lit pas un fichier de la liste d'arguments ou quelque chose comme la réponse implique. Il aurait été préférable, dans ce cas, de laisser le code erroné en place pour rendre toute cette page plus logique. – Rondo

+0

@Rondo - no. [Ici] (http://stackoverflow.com/posts/1431551/revisions) sont les révisions. –

Répondre

16

En exécutant "java Read < input.txt" vous avez dit que le système d'exploitation pour ce processus, le fichier est canalisé standard. Vous ne pouvez alors revenir à la ligne de commande à l'intérieur de l'application. Si vous voulez faire cela, passez input.txt en tant que paramètre de nom de fichier à l'application, ouvrez/lisez/fermez le fichier vous-même depuis l'application, puis lisez depuis l'entrée standard pour obtenir des informations depuis la ligne de commande .

+0

Merci pour la réponse, il clarifie –

9

Eh bien, cela est typique pour la lecture dans un BufferedReader. readLine() renvoie null lorsque la fin du flux est atteinte. Peut-être votre boucle infinie est le problème ;-)

// try/catch ommitted 

String x = null; 

while((x = f.readLine()) != null) 
{ 
    System.out.println(x); 
} 
6

Vous devez mettre fin à votre boucle while lorsque la ligne est nulle, comme ceci:

BufferedReader in = null; 
    try { 
     in = new BufferedReader(new InputStreamReader(System.in)); 
     String line; 
     while ((line = in.readLine()) != null) { 
      System.out.println(line); 
     } 
    } 
    catch (IOException e) { 
     logger.error("IOException reading System.in", e); 
     throw e; 
    } 
    finally { 
     if (in != null) { 
      in.close(); 
     } 
    } 
0

est-il un moyen par lequel je peux rendre le standard dans (ligne de commande) actif après que le fichier étant introduit dans le code est fait?

Désolé Bump une vieille question, mais aucune des réponses à ce jour les points qu'il y est une (shell uniquement) façon de passer à l'entrée arrière console après la tuyauterie dans un fichier.

Si vous exécutez la commande

{ cat input.txt & cat; } | java Read 

alors le texte de input.txt sera transmis à java Read et vous sera ensuite retombé à l'entrée console.

Notez que si vous appuyez sur Ctrl + D, vous obtiendrez la boucle infinie de null s, sauf si vous modifiez votre programme pour mettre fin à la boucle lorsqu'elle reçoit nulle.

Questions connexes