Kann Eclipse stdin aus einer Datei lesen?
Kann Eclipse stdin aus einer Datei lesen?
Antworten:
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 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.
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
Stdin kann jetzt einer Datei auf der Registerkarte Allgemein der Startkonfigurationsdialoge zugewiesen werden .
Wie erwartet ist dies eine neue Funktion der gerade veröffentlichten Eclipse 4.5 und funktioniert daher in einer älteren Version nicht.
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.
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.
public static void main(String [] args)
Methode, müssen Sie nicht nach args
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.
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.
< ${workspace_loc:/MyProject/file}
in 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
[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.
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.
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