Kann Eclipse stdin aus einer Datei lesen?
Sie können System.in mit einer einzigen Codezeile umleiten:
System.setIn(new FileInputStream(filename));
Siehe System.setIn () .
In Eclipse 4.5 oder höher kann im Dialogfeld zum Starten der Konfiguration festgelegt werden, dass System.in aus einer Datei liest. Siehe die Ankündigung hier .
[Update] Wie bereits in den Kommentaren erwähnt, war diese Antwort irreführend. Ich habe sie aktualisiert, um die Fehler zu beheben. [/ Update]
Auf der Bash oder der Eingabeaufforderung können Sie: 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 ein anderes mit dem Parameter file. Sehen Sie sich Scotts Antwort an, welche Art von Code Sie hinzufügen müssen, um die Option -d aus dem Array program arguments zu analysieren.
Wenn Sie auf eine Datei in Ihrem Eclipse-Projekt verweisen möchten, müssen Sie darauf achten, dass der Speicherort stimmt und die Variable $ {resource_loc:} verwendet wird:
-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. In diesem Ordner werden alle Ihre Eclipse-Projekte gespeichert. 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.
Es gibt eine neue Eclipse-Version, Eclipse 4.5 (Mars), die das Problem behoben hat!
Dies ist die Ankündigung und Beschreibung des Features: http://Eclipse.org/mars/noteworthy/#_assigning_stdin_to_a_file
Stdin kann jetzt einer Datei auf der Registerkarte Allgemein der Startkonfigurationsdialoge zugewiesen werden.
Wie erwartet ist dies eine neue Funktion von Eclipse 4.5 und wird daher in einer älteren Version nicht funktionieren.
Auf der Registerkarte "Allgemein" des Dialogfelds "Ausführen" 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 2 Dateifelder angezeigt werden, eines für Standard-In und eines für Standard-Out mit den Anhängeoptionen.
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, von dem ich gehört habe, dass es "Ausführen" ändern soll.> Registerkarte "Allgemein"> "Standardeingabe und -ausgabe"> "Datei" hat nur das Standardausgabeverhalten für die Datei und nicht für die Eingabe geändert.
Die Lösung bestand darin, die Option "-d" zu einer praktikablen Lösung zu machen. Wenn Sie irgendetwas in die Programmargumente einfügen, wird es nur an Ihr Hauptprogramm übergeben. Am Anfang von main können Sie also Folgendes tun:
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 weiterhin Ihre Programmargumente im Menü "Ausführen" festlegen, wie in this answer beschrieben.
Die Lösung für mich (auf einem Mac mit Eclipse CDT für eine C-Anwendung) bestand darin, "<path/to/somefile" am Ende anderer Argumente auf der Registerkarte "Arguments" des Dialogfelds "Run Configuration" hinzuzufügen.
Überprüfen Sie auch diese andere Frage für eine Antwort, die das Starten eines Java in einem angehaltenen Zustand und das anschließende Anhängen des Debuggers mit Eclipse beinhaltet.
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-Startprogramm 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 denke, dass Sie wollen, aber Sie können den Inhalt Ihrer Infile in die Eclipse-Konsole kopieren und einfügen, wenn Sie Ihr Programm starten.
< ${workspace_loc:/MyProject/file}
in der Debug-Konfiguration/Argumente/Programmargumente:
funktioniert gut für mich.
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
[tab 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 in Windows etwas Ähnliches tun.
Dies wird in Eclipse überraschenderweise nicht unterstützt und es gibt anscheinend keine aktuellen Pläne, es hinzuzufügen. Siehe https://bugs.Eclipse.org/bugs/show_bug.cgi?id=155411 , um zu folgen und abzustimmen.
Ich werde hier aktualisieren, wenn sie es implementieren.
Was ich getan habe war, ein Ant-Ziel zu erstellen und es als "Run External" von Eclipse aus zu starten. Hier sind die Schritte:
res\in.txt
und eines für die Ausgabe: res\out.txt
Ein ... kreieren 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>
In Eclipse gehen Sie zu: Run->External Tools->External Tools Configurations->Ant Build-> New Launch Configuration
Verwenden Sie die folgende Konfiguration:
Section Main
Build-Datei: ${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 in der Symbolleiste auf die Schaltfläche "Extern ausführen" klicken und die Eingabe- oder Ausgabedateien nach Bedarf ändern