Ist es möglich, dass Eclipse stdin aus einer Datei liest?
Die Option '-d' in der Ausführungskonfiguration -> Argumente scheint nicht zu funktionieren. Zumindest nicht in Eclipse 3.7.1
Ist es möglich, dass Eclipse stdin aus einer Datei liest?
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 der Startkonfigurationsdialog System.in so einstellen, dass aus einer Datei gelesen wird. Siehe die Ankündigung hier .
[Update] Da in den Kommentaren darauf hingewiesen wurde, dass diese Antwort irreführend war, habe ich sie aktualisiert, um die Fehler zu korrigieren. [/Update]
In der Bash oder der Eingabeaufforderung können Sie das tun: C:\myprogramm < file.txt
(Windows) oder ./myprogramm < file.txt
(Linux)
Leider ist es in Eclipse nicht möglich, das gleiche Ergebnis zu erzielen, da es in Eclipse keine Option gibt, die stdin an eine Datei zu binden. Stattdessen müssen Sie in Ihrem Code manuell einen Dateistream öffnen und dann aus diesem lesen. Eine Möglichkeit, dies zu tun, ist die Verwendung eines Programmarguments, um es zu aktivieren, und eines weiteren mit dem Dateiparameter. Siehe Scotts Antwort auf die Art des Codes, den Sie hinzufügen müssen, um die Option -d aus dem Array der Programmargumente zu parsen.
Wenn Sie auf eine Datei innerhalb Ihres Eclipse-Projekts verweisen wollen, müssen Sie darauf achten, dass Sie den richtigen Ort angeben und die Variable ${resource_loc:} verwenden:
-d ${resource_loc:/MyProject/file}
Sie können natürlich auch einen absoluten Pfad angeben:
-d path/to/file or -d C:\path\to\file
Der Parameter resource_loc bezieht sich auf Ihren Arbeitsbereich. Das ist der Ordner, in dem alle Ihre Eclipse-Projekte gespeichert sind. Von dort aus müssen Sie noch auf Ihren Projektordner verweisen und dann auf die Datei, die Sie laden möchten.
Je nachdem, ob Sie Linux oder Winodws verwenden, müssen Sie möglicherweise die Schrägstrichrichtung ändern.
Die Option '-d' in der Ausführungskonfiguration -> Argumente scheint nicht zu funktionieren. Zumindest nicht in Eclipse 3.7.1
Sie müssen auch eine Art von Logik in Ihrem Programm, um mit diesen Argumenten umzugehen, da dies sonst nicht funktionieren wird.
Es gibt eine neue Eclipse-Version, Eclipse 4.5 (Mars), die folgende Probleme behoben hat das Thema !
Dies ist die Ankündigung und Beschreibung der Funktion: http://eclipse.org/mars/noteworthy/#_assigning_stdin_to_a_file
Stdin kann nun einer Datei im Verzeichnis Gemeinsame t c
Wie erwartet, ist dies eine neue Funktion der gerade erschienenen Version 4.5 von eclipse und wird daher in einer älteren Version nicht funktionieren.
Auch 2016 ist die Antwort richtig. Eclipse Neon 4.6 bietet die Möglichkeit, eine Eingabedatei (.in) genauso einfach zu lesen wie die Benutzereingabe von der Konsole. Daher verwenden Scanner sc = new Scanner(System.in);
mit den konfigurierten Einstellungen funktioniert einwandfrei. Um genau zu sein, finden Sie den obigen Bildschirm unter Ausführen > Ausführungskonfigurationen > Registerkarte Allgemein.
Auf der Registerkarte "Allgemein" des Ausführungsdialogs gibt es unter "Standardeingabe und -ausgabe" ein Kontrollkästchen für "Datei", aber es scheint nur für die Ausgabe zu gelten...
Ich würde erwarten, dass dort 2 Dateifelder zu sehen sind, eines für Standard-In, eines für Standard-Out mit den Anhängeoptionen.
Sie werden Ihren Code etwas anpassen müssen, damit dies in Eclipse funktioniert. Die anderen Antworten oben haben nicht funktioniert, als ich es versucht habe. Eine andere, die ich gesehen habe, die besagt, dass man Run >Common tab>Standard Input and Output>File ändern soll, änderte nur das stdout Verhalten auf die Datei, nicht die Eingabe.
Die Lösung bestand darin, die Option "-d" zu einer praktikablen Lösung zu machen. Wenn man irgendetwas in die Programmargumente einträgt, wird es einfach an das Hauptprogramm weitergereicht. Was Sie also am Anfang von main tun können, ist etwas wie dies:
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 noch Ihre Programmargumente im Menü Ausführen.. einstellen, wie in este Antwort.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
1 Stimmen
Immer noch nicht in 3.5.2 für die Eingabe. Wird dies als Eclipse-Fehler gemeldet?
1 Stimmen
@ThorbjørnRavnAndersen bugs.eclipse.org/bugs/show_bug.cgi?id=155411