Das EOF (Ctrl + Z) abfangen

Status
Nicht offen für weitere Antworten.
I

ivan_07

Gast
Hallo allerseits

Ich habe ein dummes Problem:

Code:
public static void main(String[] args)
    {
        int c = 0;
        int nummer = 0;

        try
        {
            FileOutputStream fos = new FileOutputStream("C:/Temp/out.txt");

            System.out.println("Bitte den Text eingeben und die Texteingabe mit Ctrl + Z beenden!\n");

            while ((c = System.in.read()) != -1)
            {
                fos.write(c);
            }

            nummer = System.in.read();
            System.out.println("Nummer: " + nummer);

            nummer = System.in.read();
            System.out.println("Nummer: " + nummer);

            nummer = System.in.read();
            System.out.println("Nummer: " + nummer);

            fos.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

Wenn ich den Text eingebe, wird jedes Mal -1 eingelesen, obwohl ich gar nicht dazu komme, was einzugeben. Die -1 ist wohl Ctrl+Z (-1 als Ende des Streams). Wie kann ich diesen Wert aus dem Buffer entfernen und die neue Zahleingabe ermöglichen?

Hinweis:
Der Text kann mehrere Zeilen enthalten und das "\n" kann nicht als Markierungszeichen für das Ende der Eingabe eingesetzt werden!

Danke für jeden Tipp.
 
S

SlaterB

Gast
> wird jedes Mal -1 eingelesen, obwohl ich gar nicht dazu komme, was einzugeben

??

wird überhaupt was eingelesen?
wenn ja was?

> Die -1 ist wohl Ctrl+Z (-1 als Ende des Streams).

was heißt hier 'wohl'? kann man doch mit einfachen Test herausfinden,
was läßt dich vermuten, dass Ctrl-Z irgendwas mit einer Zahl, z.B. -1 zu tun hat?
ich hätte jetzt gedacht, dass das in den meisten Konsolen eher ein Meta-Kommando zum Abbruch des Programms ist
 
G

Guest

Gast
Vielen Dank für diene Antwort.

SlaterB hat gesagt.:
>
wird jedes Mal -1 eingelesen, obwohl ich gar nicht dazu komme, was einzugeben


??

wird überhaupt was eingelesen?
wenn ja was?

Ja, das Einlesen funktioniert. Heisst, ich kann einen Text einlesen und dieser wird in die Datei C:/TEmp/out.txt geschrieben.

SlaterB hat gesagt.:
> Die -1 ist wohl Ctrl+Z (-1 als Ende des Streams).

was heißt hier 'wohl'? kann man doch mit einfachen Test herausfinden,
was läßt dich vermuten, dass Ctrl-Z irgendwas mit einer Zahl, z.B. -1 zu tun hat?
ich hätte jetzt gedacht, dass das in den meisten Konsolen eher ein Meta-Kommando zum Abbruch des Programms ist

Man kann es natürlich auch testen (wurde auch im Debug-Modus gemacht). Soviel ich weiss, wird in der Console mit der Tastenkombination Ctrl + Z das Ende der Eingabe in eine Datei (Stream-Ende) markiert. Das was du meinst ist vermutlich Ctrl + C.

Nachdem ich den Text eingegeben und das Ende der Eingabe mit Ctrl + Z markiert habe, läuft das Programm bis zum Ende durch, ohne dass ich nach den Zahlen wieder gefragt werde. Der Grund ist der, dass ich im Eingabepuffer immer den Wert -1 habe, der zur Kontrolle auch ausgegeben wird.

Meine Frage ist:
Kann ich diesen Wert überhaupt aus dem Puffer entfernen, denn nur in diesem Fall würde die Methode 'read' anhalten und auf die Eingabe warten?

Meine Befürchtung:
Mit Ctrl + Z markieren ich das Ende des Streams. Ich hoffe nicht, dass ich den Stream (System.in) schliesse.

Also, bit etwas ratlos. Wie kann man das mache bzw. was mache ich falsch?

Vielen Dank.
 
S

SlaterB

Gast
interessant dieses Ctrl Z,
ja, ich nehme nun auch an, dass der Stream geschlossen ist,
und kann sonst nichts weiter beitragen ;)

gibts nicht noch mehr dieser Steuerungszeichen, die du verwenden könntest?
sonst muss es eine bestimmter Textbaustein sein
 
I

ivan_07

Gast
SlaterB hat gesagt.:
interessant dieses Ctrl Z,
ja, ich nehme nun auch an, dass der Stream geschlossen ist,
und kann sonst nichts weiter beitragen ;)

gibts nicht noch mehr dieser Steuerungszeichen, die du verwenden könntest?
sonst muss es eine bestimmter Textbaustein sein

Nun, ich wollte es mit ESC auch probieren, das Programm macht aber keinen Wank. Offenbar wird dieses Zeichen aus irgendeinem Grund gar nicht eingelesen (ASCII: 27). Wenn ich es eingebe und ENTER drücke, sehe ich nur Werte 10 und 13 nacheinander (Zeilenumbruch / Zeilenrücklauf). Ich kann es mir allerdings nicht vorstellen, dass ich ein solches Zeichen von der Console nicht eilesen kann. Vermutlich mache ich es falsch. Denn, mit C habe ich es oft getan und sehe keinen Grund, wieso man es mit Java nicht tunn können sollte.

Habe das Einlesen mit Methoden der Klasse java.util.Scanner - next bzw. nextLine - probiert, bin aber auch nicht weiter gekommen.

SlaterB hat gesagt.:
a, ich nehme nun auch an, dass der Stream geschlossen ist,

Es bleibt aber die Frage: Wieso lese ich drei mal die -1 aus, wenn der Stream geschlossen sein sollte!

Auf jeden Fall - vielen Dank.
 
S

SlaterB

Gast
> Vermutlich mache ich es falsch. Denn, mit C habe ich es oft getan und sehe keinen Grund, wieso man es mit Java nicht tunn können sollte.

kommt immer darauf an wo du bist,
die normale Windows- oder sonstige Konsole kann kaum unterscheiden,
welches Programm gerade läuft und liefert allen die gleichen Zeichen,

Esc funktioniert bei mir aber auch nicht, löscht dagegen die aktuelle Zeile in der Windows-Konsole -> Meta-Kommando

> Wieso lese ich drei mal die -1 aus, wenn der Stream geschlossen sein sollte!

das ist normal bei geschlossenen Stream: es wird nur noch -1 gelesen

---------

interessanterweise wird bei mir übrigens nur in der Eclipse-Konsole bei Strg-Z der Stream geschlossen, Esc hat gar keine Wirkung,

unter der Windows-Konsole bewirkt Strg-Z den Abbruch der Schleife, aber weitere Eingaben sind möglich!,
verrückt, alles eh nur Spielereien mit den vorgegebenen Möglichkeiten,
von sowas würde ich mich nicht abhängig machen
 
I

ivan_07

Gast
SlaterB hat gesagt.:
von sowas würde ich mich nicht abhängig machen

Ich auch nicht, wenn ich die Wähl hätte. Ich muss aber eine Lösung finden, ohne auf GUI-Komponenten und KeyListener zugreifen zu müssen. Denn, ich kann es mir überhaupt nicht vorstellen, dass so was nicht möglich ist.
 
B

bashi

Gast
hallo

hast du eine lösung für dein problem gefunden? falls ja, wäre ich froh, wenn ich diese sehen dürfte, da ich mit gleichem problem kämpfe.

mfg
 
G

Guest

Gast
Leider habe ich bis heute keine Lösung gefunden, die verhebt.

Gruss.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Process.destory() == CTRL+C Allgemeine Java-Themen 2
L ctrl-z wird nicht in Variable gespeichert Allgemeine Java-Themen 4
CodingBerlin Mouse Clicks abfangen Allgemeine Java-Themen 4
X jvm exception abfangen und an externes Programm schicken Allgemeine Java-Themen 4
S equals-Methode bestimmer Klassen abfangen Allgemeine Java-Themen 2
E Exceptions abfangen und dann Programm stoppen - aber wie? Allgemeine Java-Themen 2
T Daten über port abfangen mit proxy server Allgemeine Java-Themen 12
M Swing java command line abfangen Allgemeine Java-Themen 8
C Swing Abfangen von Fehlern in GUI Allgemeine Java-Themen 4
R Threads Exceptions von Threads abfangen im ThreadPool Allgemeine Java-Themen 5
C Kopiervorgang abfangen Allgemeine Java-Themen 10
T Methoden In Konsole tasten abfangen? Allgemeine Java-Themen 4
B Windows Shutdown abfangen Allgemeine Java-Themen 10
O Input/Output CMD-Ausgabe abfangen und in Datei speichern Allgemeine Java-Themen 8
D Nullpointer abfangen Allgemeine Java-Themen 7
V JNI Call Crash verhindern (abfangen) Allgemeine Java-Themen 2
E JAVA URL abfangen und weiterleiten? Filter? Allgemeine Java-Themen 6
F Alle Exceptions abfangen Allgemeine Java-Themen 4
reibi NoClassDefFoundError abfangen Allgemeine Java-Themen 6
N BlueJ Abfangen vom Beenden Allgemeine Java-Themen 7
B Alle Exceptions auf einmal abfangen Allgemeine Java-Themen 4
B Exception wird geworfen, ich darf sie aber nicht abfangen. Allgemeine Java-Themen 10
P [SWT] Copy, Paste und Cut abfangen Allgemeine Java-Themen 6
T WeakHashMap: Wie "null" effizient abfangen? Allgemeine Java-Themen 5
R Loading-Thread und Exceptions abfangen. Allgemeine Java-Themen 4
G Tastatursignale abfangen oder ist Java dafuer zu abstrakt? Allgemeine Java-Themen 12
E programm im background tastendruck abfangen Allgemeine Java-Themen 4
H NullPointerException trotz Abfangen von null? Allgemeine Java-Themen 9
M Speichern von Word als Event abfangen Allgemeine Java-Themen 7
W Das schließen des JFrame abfangen, wiei? Allgemeine Java-Themen 6
P Nicht terminierende Methoden abfangen - timeout ? Allgemeine Java-Themen 3
reibi Aktion Taste gedrückt abfangen Allgemeine Java-Themen 9
G Bildschirmänderung abfangen? Allgemeine Java-Themen 4
J Method.invoke -> Exceptions der Funktion abfangen Allgemeine Java-Themen 5
B Fehlermeldung von dispatcher.forward abfangen Allgemeine Java-Themen 2
P CLAmp-Ausgaben abfangen Allgemeine Java-Themen 2
H Programmterminierung abfangen Allgemeine Java-Themen 4
R Alle Konsolenausgaben abfangen Allgemeine Java-Themen 8
G outOfMemoryError beim Einlesen einer Datei abfangen? Allgemeine Java-Themen 13
F Überlauf abfangen Allgemeine Java-Themen 1
J ToolTipText Event abfangen Allgemeine Java-Themen 5
M unterschiedliche Betriebssysteme abfangen Allgemeine Java-Themen 3
C LinkedList Exception abfangen Allgemeine Java-Themen 8
0 StackOverflow abfangen Allgemeine Java-Themen 15
M Runtime.getRuntime().exec() - Fehler abfangen Allgemeine Java-Themen 5
L Tastatureingaben abfangen Allgemeine Java-Themen 6
M err oder alle Exceptions eines Programms abfangen Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben