webentwicklung-frage-antwort-db.com.de

Eclipse liest stdin (System.in) aus einer Datei

Kann Eclipse stdin aus einer Datei lesen?

67
Kevin

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 festgelegt werden, dass System.in aus einer Datei liest. Siehe die Ankündigung hier .

Common tab of Launch Configuration dialog

58
Michael Myers

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

12
lanoxx

Update 2015

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

Wie erwartet ist dies eine neue Funktion von Eclipse 4.5 und wird daher in einer älteren Version nicht funktionieren.

10
Petr Janeček

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.

8
John Gardner

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.

6
Scott

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.

5
Stewart Stevens

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.

4
KC Baltz
< ${workspace_loc:/MyProject/file}

in der Debug-Konfiguration/Argumente/Programmargumente:

funktioniert gut für mich.

3
Vlad

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.

2

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.

1
studgeek

Was ich getan habe war, ein Ant-Ziel zu erstellen und es als "Run External" von Eclipse aus zu starten. Hier sind die Schritte:

  • Ich habe eine Eingabedatei zum Lesen von: 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

0
drverboten