Question

Voici un simple morceau de code:

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

J'exécute ceci en tant que: java Read < input.txt

Une fois que le fichier input.txt est complètement intégré au programme, x continue à obtenir des valeurs NULL infinies. Pourquoi est-ce si? Existe-t-il un moyen d’activer l’entrée Standard In (ligne de commande) après l’introduction du fichier dans le code? J'ai essayé de fermer le flux et de le rouvrir, cela ne fonctionne pas. Réinitialiser etc également.

Était-ce utile?

La solution

En exécutant "java Read < input.txt" vous avez indiqué au système d'exploitation que, pour ce processus, le fichier pipé est conforme à la norme . Vous ne pouvez pas revenir à la ligne de commande à partir de l'application.

Si vous voulez faire cela, passez ensuite input.txt en tant que paramètre de nom de fichier à l'application, ouvrez / lisez / fermez le fichier vous-même depuis l'intérieur de l'application, puis lisez depuis l'entrée standard pour obtenir des informations à partir de la ligne de commande.

Autres conseils

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

// try / catch ommitted

String x = null;

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

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

Existe-t-il un moyen de créer l'entrée standard (ligne de commande)   actif après l’introduction du fichier dans le code?

Désolé de répondre à une vieille question, mais aucune des réponses jusqu'à présent n'indique qu'il existe un moyen de revenir à l'entrée de la console après avoir transféré un fichier dans un fichier.

Si vous exécutez la commande

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

alors le texte de input.txt sera passé à java Read et vous serez alors redirigé vers l'entrée de la console.

Notez que si vous appuyez ensuite sur Ctrl + D , vous obtiendrez la boucle infinie de null s, à moins que vous ne modifiiez votre programme pour mettre fin à la boucle reçoit null.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top