In Eclipse 4.5 oder höher kann im Dialogfeld zum Starten der Konfiguration System.in so eingestellt werden, dass es aus einer Datei liest. Siehe die Ankündigung hier .
[Update] Wie in den Kommentaren erwähnt, war diese Antwort irreführend, daher habe ich sie aktualisiert, um die Fehler zu korrigieren. [/Aktualisieren]
An der Bash- oder Eingabeaufforderung können Sie Folgendes tun:
C:\myprogramm < file.txt(Windows) oder ./myprogramm < file.txt (Linux)
Leider ist es in Eclipse nicht möglich, dasselbe Ergebnis zu erzielen, da es keine Option gibt, das stdin an eine Datei in Eclipse zu binden. Stattdessen müssen Sie einen Dateistream in Ihrem Code manuell öffnen und stattdessen daraus lesen. Eine Möglichkeit, dies zu tun, besteht darin, ein Programmargument zu verwenden, um es zu aktivieren, und eine andere mit dem Dateiparameter. Sehen Sie sich Scotts Antwort an, welche Art von Code Sie hinzufügen müssen, um die Option -d aus dem Programmargument-Array zu analysieren.
Wenn Sie auf eine Datei in Ihrem Eclipse-Projekt verweisen möchten, müssen Sie darauf achten, den richtigen Speicherort zu finden und die Variable $ {resource_loc:} verwenden:
-d ${resource_loc:/MyProject/file}
Natürlich können Sie auch einen absoluten Pfad angeben:
-d path/to/file or -d C:\path\to\file
Der Parameter resource_loc bezieht sich auf Ihren Arbeitsbereich. Dies ist der Ordner, in dem alle Eclipse-Projekte gespeichert sind. Von dort aus müssen Sie noch auf Ihren Projektordner und dann auf die Datei verweisen, die Sie laden möchten.
Je nachdem, ob Sie Linux oder Winodws verwenden, müssen Sie möglicherweise die Schrägstrichrichtung anpassen.
Die Option '-d' unter Konfiguration ausführen -> Argumente scheint nicht zu funktionieren. Zumindest nicht in Eclipse 3.7.1
Sagar Jauhari
1
Sie müssen Ihrem Programm auch eine Art Logik hinzufügen , um mit diesen Argumenten umgehen zu können, sonst funktioniert dies allein nicht.
Scott
4
Diese Antwort hat nichts mit std.in zu tun. Sie lernen, Dateien zu öffnen, anstatt std.in zu lesen. Warum erhalten falsche und irreführende Antworten so viele positive Stimmen?
Val
12
Update 2015
Es gibt eine neue Eclipse-Version, Eclipse 4.5 (Mars), die das Problem behoben hat !
Dies ist die richtige Antwort - vorausgesetzt, Sie leben im Jahr 2015 :)
Astrojuanlu
Richtige Antwort auch ab 2016. Eclipse Neon 4.6 erleichtert das Lesen einer Eingabedatei (.in) genauso wie das Lesen von Benutzereingaben von der Konsole. Daher Scanner sc = new Scanner(System.in);funktioniert die Verwendung mit den konfigurierten Einstellungen einwandfrei. Um genau zu sein, finden Sie den obigen Bildschirm unter Ausführen> Konfigurationen ausführen> Registerkarte Allgemein.
Keith OYS
8
Auf der Registerkarte "Allgemein" des Ausführungsdialogs befindet sich unter "Standardeingabe und -ausgabe" ein Kontrollkästchen für "Datei". aber es scheint nur für die Ausgabe zu sein ...
Ich würde erwarten, dass dort zwei Dateifelder angezeigt werden, eines für Standard-In und eines für Standard-Out mit den Optionen zum Anhängen.
Dies funktionierte nur für die Ausgabe zum Standard Input and Output
Einfügen
6
Sie müssen Ihren Code etwas optimieren, damit dies in Eclipse funktioniert. Die anderen Antworten oben haben nicht funktioniert, als ich es versuchte. Ein anderes Sprichwort, das ich gesehen habe, um Ausführen zu ändern.> Registerkarte "Allgemein"> Standardeingabe und -ausgabe> Datei hat nur das Standardverhalten der Datei geändert, nicht die Eingabe.
Die Lösung bestand darin, die Option "-d" zu einer funktionsfähigen Lösung zu machen. Wenn Sie etwas in die Programmargumente einfügen, wird es einfach an Ihr Hauptargument übergeben. Was Sie also am Anfang von main tun können, ist ungefähr so:
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);
}
Sie müssen Ihre Programmargumente weiterhin im Menü Ausführen festlegen, wie in dieser Antwort beschrieben.
Angenommen, Ihr Code befindet sich in der public static void main(String [] args)Methode, müssen Sie nicht nach argsNull suchen - er enthält mindestens ein leeres Array.
Rob Gilliam
5
Die Lösung für mich (auf einem Mac mit Eclipse CDT für eine C-Anwendung ausgeführt) bestand darin, "<path / to / somefile" am Ende anderer Argumente auf der Registerkarte "Argumente" des Dialogfelds "Konfiguration ausführen" hinzuzufügen.
Überprüfen Sie auch diese andere Frage auf eine Antwort, bei der ein Java-Programm in einem angehaltenen Zustand gestartet und der Debugger dann mit Eclipse angehängt wird.
Dies funktioniert auch unter Linux mit CDT 7.0. Funktioniert wahrscheinlich auch mit älteren Versionen.
Stabledog
Dies funktioniert nicht unter Linux mit Eclipse Java EE Indigo SR 1 :(
Eponymous
4
Ich sehe keine gute Möglichkeit, dies mit dem Standarddialog von Eclipse Run zu tun. Möglicherweise können Sie dies jedoch mit einem externen Tool-Launcher tun und entweder die Standardsyntax "<infile" verwenden oder ein .bat / .sh-Skript aufrufen, um dies für Sie zu tun.
Es ist nicht automatisiert, was ich vermute, aber Sie können den Inhalt Ihrer Datei kopieren und in die Eclipse-Konsole einfügen, wenn Sie Ihr Programm starten.
Eine faszinierende Möglichkeit. Ich bin gespannt, welche Version von Eclipse Sie verwenden und auf welchem System. Ich habe dies mit Eclipse Juno unter Mac OS X 10.8 versucht, und der Umleitungsoperator <wird wörtlich als Befehlszeilenargument interpretiert.
Nathan Ryan
Eclipse IDE für Java-Entwickler, Version: Juno Release, Build-ID: 20120614-1722, die unter Mac OS X 10.7.5 ausgeführt wird, funktioniert hier NICHT. :(
Eddified
funktioniert auch nicht für mich mit Juno Service Release 2 in Windows 7 x64
D_Guidi
Ich verwende die Eclipse, die mit ADT unter Windows 7 x64 geliefert wird.
Vlad
2
Für Linux: Ich denke, der einfachste Weg ist, ein Sh-Skript zu schreiben.
1) schreibe run.sh wie folgt:
Ihr Programm mit Params <input.txt
2) Geben Sie in der Eclipse-Profilkonfiguration an
Ich weiß nicht, wie ich zu Eclipse beitragen soll, aber dieser Fehler ist so ärgerlich, dass ich den Code genug studieren würde, um selbst eine Standardausgabespezifikationsbox hinzuzufügen. Das einzige Problem ist, dass ich es für Code verwenden muss, der morgen fällig ist, damit ich keine Zeit habe. Trotzdem steht es auf meiner Agenda für mein nächstes ernsthaftes Codierungsprojekt - es sei denn, jemand anderes kommt zuerst dazu. (Betrachten Sie dies als eine Herausforderung für andere Entwickler, mich bis zum Anschlag zu schlagen.)
Steve
@studgeek Ich denke, der Fehler wurde überprüft und behoben und die Funktion soll in Version: Mars (4.5) Build-ID: I20141208-2000 hinzugefügt werden. Habe ich recht?
Sunil Kumar
0
Ich habe ein Ant-Ziel erstellt und es als "Extern ausführen" von Eclipse aus gestartet. Hier sind die Schritte:
Ich habe eine Eingabedatei zum Lesen: res\in.txtund eine für die Ausgabe:res\out.txt
Erstellen Sie eine build.xmlmit den gewünschten Zielen (dies ist nur ein Beispiel):
Gehen Sie in Eclipse zu: Run->External Tools->External Tools Configurations->Ant Build-> New Launch ConfigurationVerwenden Sie die folgende Konfiguration:
Section Main
Buildfile: ${workspace_loc:/Tests/build.xml}
Basisverzeichnis: ${workspace_loc:/Tests}
* Hinweis: Tests ist der Name meines Eclipse-Projekts
Jetzt können Sie Ihr Projekt ausführen, indem Sie auf die Symbolleistenschaltfläche Extenal ausführen klicken und die Eingabe- oder Ausgabedateien nach Bedarf ändern
Antworten:
Reines Java
Sie können System.in mit einer einzigen Codezeile umleiten:
System.setIn(new FileInputStream(filename));
Siehe System.setIn () .
Eclipse-Konfiguration
In Eclipse 4.5 oder höher kann im Dialogfeld zum Starten der Konfiguration System.in so eingestellt werden, dass es aus einer Datei liest. Siehe die Ankündigung hier .
quelle
[Update] Wie in den Kommentaren erwähnt, war diese Antwort irreführend, daher habe ich sie aktualisiert, um die Fehler zu korrigieren. [/Aktualisieren]
An der Bash- oder Eingabeaufforderung können Sie Folgendes tun:
C:\myprogramm < file.txt
(Windows) oder./myprogramm < file.txt
(Linux)Leider ist es in Eclipse nicht möglich, dasselbe Ergebnis zu erzielen, da es keine Option gibt, das stdin an eine Datei in Eclipse zu binden. Stattdessen müssen Sie einen Dateistream in Ihrem Code manuell öffnen und stattdessen daraus lesen. Eine Möglichkeit, dies zu tun, besteht darin, ein Programmargument zu verwenden, um es zu aktivieren, und eine andere mit dem Dateiparameter. Sehen Sie sich Scotts Antwort an, welche Art von Code Sie hinzufügen müssen, um die Option -d aus dem Programmargument-Array zu analysieren.
Wenn Sie auf eine Datei in Ihrem Eclipse-Projekt verweisen möchten, müssen Sie darauf achten, den richtigen Speicherort zu finden und die Variable $ {resource_loc:} verwenden:
Natürlich können Sie auch einen absoluten Pfad angeben:
Der Parameter resource_loc bezieht sich auf Ihren Arbeitsbereich. Dies ist der Ordner, in dem alle Eclipse-Projekte gespeichert sind. Von dort aus müssen Sie noch auf Ihren Projektordner und dann auf die Datei verweisen, die Sie laden möchten.
Je nachdem, ob Sie Linux oder Winodws verwenden, müssen Sie möglicherweise die Schrägstrichrichtung anpassen.
quelle
Update 2015
Es gibt eine neue Eclipse-Version, Eclipse 4.5 (Mars), die das Problem behoben hat !
Dies ist die Ankündigung und Beschreibung der Funktion: http://eclipse.org/mars/noteworthy/#_assigning_stdin_to_a_file
Wie erwartet ist dies eine neue Funktion der gerade veröffentlichten Eclipse 4.5 und funktioniert daher in einer älteren Version nicht.
quelle
Scanner sc = new Scanner(System.in);
funktioniert die Verwendung mit den konfigurierten Einstellungen einwandfrei. Um genau zu sein, finden Sie den obigen Bildschirm unter Ausführen> Konfigurationen ausführen> Registerkarte Allgemein.Auf der Registerkarte "Allgemein" des Ausführungsdialogs befindet sich unter "Standardeingabe und -ausgabe" ein Kontrollkästchen für "Datei". aber es scheint nur für die Ausgabe zu sein ...
Ich würde erwarten, dass dort zwei Dateifelder angezeigt werden, eines für Standard-In und eines für Standard-Out mit den Optionen zum Anhängen.
quelle
Standard Input and Output
Sie müssen Ihren Code etwas optimieren, damit dies in Eclipse funktioniert. Die anderen Antworten oben haben nicht funktioniert, als ich es versuchte. Ein anderes Sprichwort, das ich gesehen habe, um Ausführen zu ändern.> Registerkarte "Allgemein"> Standardeingabe und -ausgabe> Datei hat nur das Standardverhalten der Datei geändert, nicht die Eingabe.
Die Lösung bestand darin, die Option "-d" zu einer funktionsfähigen Lösung zu machen. Wenn Sie etwas in die Programmargumente einfügen, wird es einfach an Ihr Hauptargument übergeben. Was Sie also am Anfang von main tun können, ist ungefähr so:
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); }
Sie müssen Ihre Programmargumente weiterhin im Menü Ausführen festlegen, wie in dieser Antwort beschrieben.
quelle
public static void main(String [] args)
Methode, müssen Sie nicht nachargs
Null suchen - er enthält mindestens ein leeres Array.Die Lösung für mich (auf einem Mac mit Eclipse CDT für eine C-Anwendung ausgeführt) bestand darin, "<path / to / somefile" am Ende anderer Argumente auf der Registerkarte "Argumente" des Dialogfelds "Konfiguration ausführen" hinzuzufügen.
Überprüfen Sie auch diese andere Frage auf eine Antwort, bei der ein Java-Programm in einem angehaltenen Zustand gestartet und der Debugger dann mit Eclipse angehängt wird.
quelle
Ich sehe keine gute Möglichkeit, dies mit dem Standarddialog von Eclipse Run zu tun. Möglicherweise können Sie dies jedoch mit einem externen Tool-Launcher tun und entweder die Standardsyntax "<infile" verwenden oder ein .bat / .sh-Skript aufrufen, um dies für Sie zu tun.
Es ist nicht automatisiert, was ich vermute, aber Sie können den Inhalt Ihrer Datei kopieren und in die Eclipse-Konsole einfügen, wenn Sie Ihr Programm starten.
quelle
in Debug-Konfiguration / Argumente / Programmargumente:
funktioniert gut für mich.
quelle
Für Linux: Ich denke, der einfachste Weg ist, ein Sh-Skript zu schreiben.
1) schreibe run.sh wie folgt:
Ihr Programm mit Params <input.txt
2) Geben Sie in der Eclipse-Profilkonfiguration an
[tab Main] C ++ Run Application = / bin / sh
[Registerkarte Argumente] Programmargumente = run.sh.
Das ist es. Wenn Sie Ihr Projekt ausführen, wird die Ausgabe des Skripts in der Eclipse-Konsole angezeigt. Sie können etwas Ähnliches in Windows tun.
quelle
Dies wird in Eclipse überraschenderweise nicht unterstützt und es scheint derzeit keine Pläne zu geben, es hinzuzufügen. Unter https://bugs.eclipse.org/bugs/show_bug.cgi?id=155411 können Sie folgen und abstimmen.
Ich werde hier aktualisieren, wenn sie es implementieren.
quelle
Ich habe ein Ant-Ziel erstellt und es als "Extern ausführen" von Eclipse aus gestartet. Hier sind die Schritte:
res\in.txt
und eine für die Ausgabe:res\out.txt
Erstellen Sie eine
build.xml
mit den gewünschten Zielen (dies ist nur ein Beispiel):<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>
Gehen Sie in Eclipse zu:
Run->External Tools->External Tools Configurations->Ant Build-> New Launch Configuration
Verwenden Sie die folgende Konfiguration:Section Main
Buildfile:
${workspace_loc:/Tests/build.xml}
Basisverzeichnis:
${workspace_loc:/Tests}
* Hinweis: Tests ist der Name meines Eclipse-Projekts
Jetzt können Sie Ihr Projekt ausführen, indem Sie auf die Symbolleistenschaltfläche Extenal ausführen klicken und die Eingabe- oder Ausgabedateien nach Bedarf ändern
quelle