68 Stimmen

Eclipse liest stdin (System.in) aus einer Datei

Ist es möglich, dass Eclipse stdin aus einer Datei liest?

1 Stimmen

Immer noch nicht in 3.5.2 für die Eingabe. Wird dies als Eclipse-Fehler gemeldet?

1 Stimmen

59voto

Michael Myers Punkte 183216

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 der Startkonfigurationsdialog System.in so einstellen, dass aus einer Datei gelesen wird. Siehe die Ankündigung hier .

Common tab of Launch Configuration dialog

12voto

lanoxx Punkte 10439

[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.

4 Stimmen

Die Option '-d' in der Ausführungskonfiguration -> Argumente scheint nicht zu funktionieren. Zumindest nicht in Eclipse 3.7.1

1 Stimmen

Sie müssen auch eine Art von Logik in Ihrem Programm, um mit diesen Argumenten umzugehen, da dies sonst nicht funktionieren wird.

5 Stimmen

Diese Antwort hat nichts mit std.in zu tun. Sie lehrt Sie, Dateien zu öffnen, anstatt std.in zu lesen. Warum erhält eine falsche und irreführende Antwort so viele positive Bewertungen?

11voto

Petr Janeček Punkte 36474

Update 2015

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 enter image description here

Wie erwartet, ist dies eine neue Funktion der gerade erschienenen Version 4.5 von eclipse und wird daher in einer älteren Version nicht funktionieren.

2 Stimmen

Das ist die richtige Antwort - vorausgesetzt, Sie leben im Jahr 2015 :)

0 Stimmen

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.

8voto

John Gardner Punkte 22999

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.

0 Stimmen

Dies funktionierte nur bei der Ausgabe für die Eingabe des Dateinamens in Standard Input and Output

6voto

Scott Punkte 16361

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.

0 Stimmen

Angenommen, Ihr Code befindet sich in der public static void main(String [] args) Methode, dann brauchen Sie nicht zu prüfen args für null - es wird mindestens ein leeres Array enthalten.

CodeJaeger.com

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.

Powered by:

X