Est-il possible pour Eclipse de lire stdin à partir d'un fichier?
Vous pouvez rediriger System.in avec une seule ligne de code:
System.setIn(new FileInputStream(filename));
Voir System.setIn () .
Dans Eclipse 4.5 ou version ultérieure, la boîte de dialogue de configuration de lancement peut définir System.in pour lire à partir d'un fichier. Voir l'annonce ici .
[Update] Comme cela a été souligné dans les commentaires, cette réponse était trompeuse, je l'ai donc mise à jour pour corriger les erreurs. [/ Update]
Sur bash ou invite de commandes, vous pouvez faire: C:\myprogramm < file.txt
(Windows) ou ./myprogramm < file.txt
(Linux)
Malheureusement, dans Eclipse, il n'est pas possible d'obtenir le même résultat, car il n'y a pas d'option pour lier le stdin à un fichier dans Eclipse. Au lieu de cela, vous devrez ouvrir manuellement un flux de fichiers dans votre code, puis le lire à la place. Une façon de le faire est d'utiliser un argument de programme pour l'activer et un autre avec le paramètre de fichier. Voir la réponse de Scott sur le type de code que vous devez ajouter pour analyser l'option -d du tableau des arguments du programme.
Lorsque vous souhaitez pointer vers un fichier à l'intérieur de votre projet Eclipse, vous devez être prudent pour obtenir le bon emplacement et utiliser la variable $ {resource_loc:}:
-d ${resource_loc:/MyProject/file}
bien sûr, vous pouvez également mettre un chemin absolu:
-d path/to/file or -d C:\path\to\file
Le paramètre resource_loc fait référence à votre espace de travail. C'est le dossier dans lequel tous vos projets Eclipse sont stockés. De là, vous devez toujours référencer votre dossier de projet, puis le fichier que vous souhaitez charger.
Vous devrez peut-être modifier la direction de la barre oblique, selon que vous utilisez Linux ou Winodws.
Il existe une nouvelle version d'Eclipse, Eclipse 4.5 (Mars) qui a corrigé le problème !
Voici l'annonce et la description de la fonctionnalité: http://Eclipse.org/mars/noteworthy/#_assigning_stdin_to_a_file
Stdin peut désormais être affecté à un fichier dans l'onglet Commun des boîtes de dialogue de configuration de lancement.
Comme prévu, il s'agit d'une nouvelle fonctionnalité de l'Eclipse 4.5 qui vient de sortir et ne fonctionnera donc pas dans une ancienne version.
Dans l'onglet "commun" de la boîte de dialogue d'exécution, sous "Entrée et sortie standard", il y a une case à cocher pour "fichier". mais il semble que ce soit uniquement pour la sortie ...
Je m'attends à voir 2 champs de fichier là-bas, un pour l'entrée standard, un pour la sortie standard avec les options d'ajout.
Vous devrez modifier votre code pour que cela fonctionne dans Eclipse. Les autres réponses ci-dessus n'ont pas fonctionné lorsque j'ai essayé. Un autre que j'ai vu dire de changer Exécuter ..> Onglet Commun> Entrée et sortie standard> Fichier n'a changé que le comportement de la sortie standard dans le fichier, pas l'entrée.
La solution était de prendre l'option "-d" à une solution viable. Si vous mettez quelque chose dans les arguments du programme, cela sera simplement passé dans votre main. Donc, ce que vous pouvez faire au début de main est quelque chose comme ceci:
Scanner in;
if (args!=null && args.length>0 && args[0].equals("-d")){
in = new Scanner(new File(args[1]));
} else {
in = new Scanner(System.in);
}
Vous devrez toujours définir vos arguments de programme dans le menu Exécuter .. comme décrit dans la réponse this .
La solution pour moi (fonctionnant sur un Mac, utilisant Eclipse CDT pour une application C) était d'ajouter "<path/to/somefile" à la fin des autres arguments dans l'onglet "Arguments" de la boîte de dialogue "Run Configuration".
Vérifiez également cette autre question pour une réponse impliquant le lancement d'un programme Java dans un état suspendu, puis l'attachement du débogueur à l'aide d'Eclipse.
Je ne vois pas une bonne façon de le faire en utilisant la boîte de dialogue d'exécution Eclipse standard. Cependant, vous pouvez peut-être le faire avec un lanceur d'outils externe et utiliser la syntaxe standard "<infile" ou appeler un script .bat/.sh pour le faire pour vous.
Ce n'est pas automatisé, c'est ce que je suppose que vous voulez, mais vous pouvez copier et coller le contenu de votre infile sur la console Eclipse lorsque vous lancez votre programme.
< ${workspace_loc:/MyProject/file}
dans la configuration de débogage/arguments/arguments de programme:
fonctionne bien pour moi.
Pour linux: Je pense que la façon la plus simple est d'écrire un sh-script.
1) écrivez run.sh comme ceci:
votre programme avec params <input.txt
2) Dans la configuration du profil Eclipse, spécifiez
[onglet Main] C++ Run Application =/bin/sh
[tab Arguments] Arguments du programme = run.sh
C'est ça. Lorsque vous exécuterez votre projet, vous verrez la sortie du script dans la console Eclipse. Vous pouvez faire quelque chose de similaire dans Windows.
Ce n'est étonnamment pas pris en charge dans Eclipse et il semble qu'il n'y ait actuellement aucun plan pour l'ajouter. Voir https://bugs.Eclipse.org/bugs/show_bug.cgi?id=155411 pour suivre et voter.
Je mettrai à jour ici s'ils le mettent en œuvre.
Ce que j'ai fait était de créer une cible Ant et de la lancer en tant que "Exécuter externe" depuis Eclipse, voici les étapes:
res\in.txt
et un pour la sortie: res\out.txt
Créer un build.xml
avec les cibles dont vous avez besoin (ce n'est qu'un exemple):
<project basedir="." default="run" name="Tests">
<target name="clean">
<delete dir="bin"/>
</target>
<target name="compile">
<mkdir dir="bin"/>
<javac srcdir="src" destdir="bin" includeantruntime="false"/>
</target>
<target name="build" depends="clean,compile"/>
<target name="run" depends="build">
<Java classname="Main" input="res\in.txt" output="res\out.txt" classpath="bin" />
</target>
</project>
Dans Eclipse, accédez à: Run->External Tools->External Tools Configurations->Ant Build-> New Launch Configuration
utilisez la configuration suivante:
Section Main
Buildfile: ${workspace_loc:/Tests/build.xml}
Répertoire de base: ${workspace_loc:/Tests}
* Remarque: Tests est le nom de mon projet Eclipse
Vous pouvez maintenant exécuter votre projet en cliquant sur le bouton de la barre d'outils Exécuter Extenal et modifier les fichiers d'entrée ou de sortie selon vos besoins