Entrée de ligne de commande en Java
-
07-07-2019 - |
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.
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.