Jetzt lerne ich Java 6

Tastatureingaben lesen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
In der einfachsten Variante können Sie einen primitiven Input-Stream einsetzen, allerdings werden Sie mit den Rückgabewerten wenig Freude haben. Bequemer (und um vieles flexibler) ist ein gepufferter 'InputStreamReader': Dann bleibt ein eingetippter Satz auch tatsächlich ein in einem String speicherbarer Satz!
16:00

Transkript

Wir sind jetzt an einem Punkt angelangt, an dem ich wieder mal einen Kapitel einschieben möchte, um Ihnen ein paar neue Möglichkeiten in der Programmierung Ihrer Java-Programme zu ermöglichen. In diesem Film soll es um Tastatur-Eingaben gehen. Und bei der Tastatur-Eingabe wissen wir das Konzept eStreams zurückgreifen, dass wir bei erst einem späteren Kapitel kennen lernen werden. Zudem werden wir auch ganz kurz mit Exaptions Berührung haben, auch das ist Ereigniskapitel. Aber trotzdem habe ich gedacht, an dieser Stelle ist es ganz gut, dass Sie sich endlich mal über die Tastatur mit Ihrem Programm unterhalten können. Also verzeichen Sie mir, wenn ich Ihnen wieder etwas schon von Dingen erzähle, die wir nicht explizit eingeführt haben. Wir wollen gerne ein kleines Programm schreiben, das den Namen des Benutzers abfragt und vielleicht noch das alte und das mit irgendwelchen sinnlosen Kommentaren quittiert. Nun, das ist dann einfaches Projekt, und wir sollten uns erst einmal überlegen, was haben wir denn bis jetzt eigentlich immer ausgegeben. Immer, wenn wir eine Ausgabe generiert haben, haben wir so etwas geschrieben: System.out.println. Hier werden später die Objekte und auch die Klassen innerhalb von Java kennen lernen, aber ich denke, Sie haben mit Sicherheit Klick dafür bekommen, ok, System.out ist irgendetwas, und alles, was ich daran sende, kommt auf der Konsole raus. System.out ist ein sogenannter OutputStream, ein Ausgabestrom, und genauso wie es einen Ausgabestrom gibt, gibt es auch einen Eingabestrom. Und dieser liest von der Standardeingabe. Und die Stadardeingabe bei unseren Programmen hier ist eben die Tastatur. Dementsprechend können wir aus dieser Standardeingabe auch lesen. Und Sie werden es nicht glauben, dieser Eingabestrom, den können Sie genauso adressieren, wie den Ausgabestrom, System.in. Und wenn ich das hier nur eintippe, dann sehen Sie in Ihrer Entwicklungsumgebung bereits, das ist ein Input-Stream. Und Sie bekommen dazu einen kleinen Kommentar auch noch geliefert, den sehen Sie leider hier auf dem Bildschirm nicht ganz, aber so weit, so gut. Was liefert den System.in? Nun, es liefert ein Byte. Ein Byte ist eine kleinste Einheit. Das bedeutet, wenn Sie irgendeine Eingabe auf der Tastatur tätigen, kommt dieses Byte bei Ihnen an. Das können wir denn mit einem Byte anfangen. Dazu tippe ich noch einmal einen weiteren Punkt ein, und ich sehe jetzt verschiedene Methoden. Was ich mir liefern lassen kann aus diesem Input-Stream. Wir haben hier zum Beispiel eine Methode, die heißt read. Und wir sehen, wir können einen Integer von dieser bekommen. Dieser Integer, auch das sehen Sie leider jetzt hier nicht ganz aber das können Sie aber sich ausprobieren, sagt an, dass das der Wert des Bytes ist, was eingegeben wurde. Nun, das sollten wir uns doch mal kurz anschauen. Also sagen wir, wir wollen das Ganze haben, und das ein Byte ist, speichern wir das in einem Integer. Na, Byte ist vielleicht nicht der ideal Name, dann schreiben wir einfach eingabe dahin, = System.in.read, setzen wir den Semikolon noch schön dahinter und lassen uns das Ganze einfach mal ausgeben. Lassen das Ganze kompalieren, wir bekommen hier noch einen kleinen Fehler, lesen immer nach, und hier steht "unreported exception". Bei der Eingabe hier kann es sein, dass eine Ausnahme auftritt, eine sogenannte Exception. Das System der Exceptions ist die Fehlerbehandlung innderhalb von Java, und die können wir selber in die Hand nehmen, wenn wir wollen. Das, wenn Sie später noch lernen. Aber hier wird gesagt, du, hier kann ein Fehler auftreten, aber du behandelst den gar nicht, das musst du irgendwie doch deklarieren. Und daher setze ich mich hier oben hin hinter dem main-Einführung hier und schreibe throws, wirft also eine Exception, und es ist eine IOException. Ich schreibe also dahinter, und dann kann sich die Laufzeitumgebung selber darum kümmern, und jetzt schreibe der mir hier noch " "throw IOException kenne ich überhaupt nicht". Wo kommt das Ding her? Na ja, das ist in einem speziellen Paket innerhalb der Java Paket deklariert. Daher gehe ich hier unter das Package und schreibe noch import java.IO. Das sind Pakete, die sich alles mit einer Ausgabe beschäftigen. Und da gibt es ganz, ganz viele Klassen drin und ähnliche Dinge, und da wir jetzt einiges draus brauchen, mache ich es hier oben einfach kurz und hänge an dieser Stelle einfach einen Stern und einen Semikolon ein, das heißt, soviel, wie importiere alle Klassen, die innerhalb des Paketes Java.IO liegen, und schone verschwinden hier meine Fehler. Es sind also ein paar Schritte auf einmal, die wir gehen müssen. Ich habe Ihnen, ja, gesagt, ein bisschen vorgreifen müssen wir, wenn wir das Ganze dann ausführen lassen. Dann taucht hier in meine NetBeans-Umgebung etwas Neues auf. Und wenn Sie nur bei der Konsole arbeiten, bekommen Sie eben Einfügemarke. Hier fragt nämlich also nach irgendetwas, was ich eingeben kann. Ist es eigentlich völlig egal, was ich eingebe. Ich gebe einfach mal Hallo ein und drücke die Enter-Taste auf meiner Tastatur, und er gibt mir 72 aus. Na ja, was mag mir das wohl sagen? System.in hat mir ein Byte der Eingabe geliefert, genau ein Einziges, und das ist das h. Und das h in diesem Falle hätte eben den Wert 72. Damit kann ich mich wirklich das anfangen, besonders, weil wir auch relativ schnell in ein kleines Problem laufen können. Je nachdem auf welchem Betriebsystem Sie arbeiten und wie die Einstellungen des Systems sind, kann das sein, dass bei System.in nicht weit orientiert eingelesen wird, also as key Code, sondern dass es sein kann, dass 2 Bytes pro Buchstaben eingelesen werden müssen, weil es Unicode basierend ist. Und schon hätten wir nur die Hälfte eines Buchstabens, und dann kennen wir noch Case aus, das heißt, wir müssen von der Byte orentierten Einleseweise zur zeichenorientierten Einleseweise. Sprich, dann muss Java so intelligenzer zu testen, was für einen Code wird benutzt, und wird dann entsprechend das Zeichen liefern, was wirklich eingegeben worden ist, und nicht nur ein Byte. Und dafür gibt es natürlich in Java direkt passende Hilfsmittel, und diese nennen sich Reader, also wir brauchen einen Reader. Dann können wir hier jetzt ein bisschen umbauen. Ich lösche das Ganze hier mal wieder raus, lasse das Ganze hier bei System.in und auch das hier löschen daraus, und wir sollten jetzt mal schauen, dass wir um dieses System.in einen InputStreamReader bekommen. Woher bekommen wir den? Na ja, der liegt auch in Java.IO. Wenn wir wollen, können wir uns hier nochmal kurz hier oben anschauen, setze ich hier nur noch mal den Punkt, einen InputStreamReader, da ist er schon. Wenn wir darauf gehen, lesen wir hier, ein InputStreamReader ist die Brücke zwischen den ByteStreams, also wo ein Byte eingelesen wird, und den Zeichentreams, wo eben ein echtes Zeichen eingelesen wird. Es liest eins der Bytes und dekodiert diese in Zeichen, passend zum verwendeten Zeichensatz. Und das ist genau das, was wir hier haben wollen. Und wenn wir hier etwas weiter noch lesen hier unten, dann wird uns hier einen Stream empfohlen, dass wir diesen InputStreamReader nicht alleine benutzen, sondern außen herum noch einen BufferedReader setzen, damit das Ganze noch performanter wird. Nun, das schauen wir uns gleich an! Aber jetzt erst einmal ein InputStreamReader. Wie bekommen wir den jetzt? Hier oben müssen wir erstmal uns anschauen, was da [] steht, und dann sagen wir hier, wir hätten gerne einen InputStreamReader, den nenne ich mal ISR, ist gleich, und jetzt brauchen wir einen neuen Instanz davon new InputStreamReader. Das werden Sie bei der objektorientierten Einführung lernen, dass man so einen Instanz bildet, und in runde Klammern kommt jetzt eben unser Eingabestrom, den wir auslesen wollen. Und damit haben wir jetzt also einen InputStreamReader, der aus System.in liest, und das Ganze liegt in ISR dann dran. Jetzt wollen wir natürlich auch wissen: Ja, was kann denn so ein InputStreamReader? Nun, das können wir jetzt in der nächsten Zeile isr. drücken, und dann sehen wir hier schon, ein InputStreamReader kann schon ein bisschen mehr, besonders wir sehen auch, liegt auch in Java.IO, und da wir mit Stern, ja, alle Pakete improtiert haben, ist die also auch direkt mitimportiert. Hier gibt es jetzt verschiedene Dinge, die interessant sein konnten. Hier gibt es zum Beispiel read. Wenn wir auf read gehen, sehen wir, er liefert wieder einen Integer, also einen Charakter, aber dieses Mal eben einen wirklichen Charakter. Das bedeutet, auch wenn wir Unicode haben wollen, zum Beispiel Zeichen aus 2 Bytes bestehen, wir bekommen hier wirklich das passende Charakter. Wir haben mal auch hier so einige andere Sachen, was wir setzen können. Können wir zum Beispiel das momentane Coding auslesen. Wir können auch diesen String wieder zumachen. Alles, was man aufmacht, sollte man später wieder zumachen. Das ist eine ganz gute Geschichte, aber wir sind noch nicht ganz fertig, das heißt, wir legen jetzt außen herum, genau wie es uns empfohlen wurde in der Doku noch einen BufferedReader. Ein BufferedReader macht etwas Nettes. Es ist ein []. Er liest einfach hinter einander die ganzen Zeichen nun ein und speichert diese solange, bis wir die abrufen. Sozusagen sammelt er uns die. Und das ist um einiges performanter, weil wir uns bei Stromen kümmern müssen, dass wir die Zeichen selber abholen. Also holen uns noch einen BufferedReader, den nennen wir vielleicht mal bReader = , Sie haben schon geahnt, new BufferedReader, und hier verlangt auch wieder einen Parameter und zwar unseren schönen InputStreamReader. Und damit haben wir einen schönen BufferedReader. Also schauen uns den mal an, was der so kann. Und das sehen wir schon mal eine ganz große Anzahl an schönen Sachen, der das Ding so kann. Und eine der Sachen, die mich interessieren, ist natürlich eine Ausgabe als String. Das bedeutet eine Zeichenkette. Wir können mit Hilfe von readLine hier eine gesamte Eingabe, eine ganze Zeile einlesen. Hier steht, er liest dann alles ein, bis der User die Enter-Taste aus seiner Tastatur drückt. Und das ist hier eine super geniale Geschichte, denn damit hätten wir uns Eingabe. Also, das hole ich mir. Wenn ich das hier aufrufe, kommt ein String zurück. Und den legen wir einfach in der eigenen [] eingabe = bReader.readLine. Und bis dahin wollen wir das natürlich jetzt testen! Ich schreibe hier einfach eingabe:, lassen wir eingabe ausgeben, dann jetzt mal laufen lassen, bekommen wir hier noch einen kleinen Fehler. Es soll natürlich ein String sein mit großem S. Jetzt schreiben wir einfach mal "Hallo, lieber Zuschauer", also eine ganze Zeile, drücken wir Enter, und wir bekommen hier Eingabe "Hallo, lieber Zuschauer", das heißt, jetzt hat er wirklich alle Zeichen solange eingelesen, bis wir die Enter-Taste gedrückt haben, und das ist hier jetzt schon mal eine gute Voraussetzung, um jetzt unser kleine Script noch etwas vorzuführen. Also, die Eingabe hier verschwindet erstmal, und hier wissen wir also, wie wir etwas einlesen können, das heißt, wir können jetzt das Programm etwas ergänzen. Wir lesen erstmal von der Konsole ein bisschen ein, und damit der User weiß, was wir gerne haben wollen, fragen wir ihn noch netterweise: Bitte geben Sie Ihren Namen ein! Dann lesen wir die Eingabe, aber diesmal nennen wir Sie einfach mal name, damit die ganz klar ist der Benutzername. Dann fragen wir ihn direkt noch was, weil zu schön war, und jetzt bin ich ein bisschen faul, kopiere mal einfach diese beiden Zahlen hier runter: Bitte geben Sie Ihr Alter ein! Und dann wollen wir hier natürlich das Alter haben. Tja, und dann die Hilfstelle, haben wir jetzt ein kleines Problem. Hmm, der BufferedReader hier liest ein, und doch auskommt ein String. Das bedeutet, Alter ist ein String. Und wir können nicht einfach hingehen und sagen auf das Alter, soll aber ein Integer sein. Ja, wenn wir das versuchen hier, wir sehen jetzt schon, Sie sehen, dann sieht man einen inkompatibelen Typ. Da kommt ein String raus. Du kannst nicht einfach sagen: "Das ist ein Integer." Und mit String lässt sich extrem schlecht rechnen. Wenn wir also später irgendeine Berechnung oder so machen wollten, würden wir jetzt hier in die Röhre gucken. Aber, Sie haben hier bei den Kapiteln über Castling gelandt. Wir können Typen umwandeln. Und das machen wir einfach. Ich schreibe hier einfach darüber, dass wir das Alter in einen Integer umwandeln. Der Integer fürs Alter nennen wir mal iAlter. Dann ist es ganz klar, das ist ein Integer, ist gleich, und jetzt benutzen wir Klasse Integer, und die hat hier die Methode parseInt, und die übernimmt einen String, und da liegen wir jetzt einfach unser Alter hinein. Es könnte sein, dass der, ja, Programmnutzer da irgendwas eingegeben hat, was man überhaupt nicht in einen Integer umwandeln kann, und damit auch für eine Exception geworden. hier müssen wir auch behandeln. Solche Dinge müssen Sie in der Praxis natürlich beachten. Dabei spielen tüchtig dann die Exceptions eine wichtige Rolle. Die müssen Sie dann einfach entsprechend sich die Filme dazu anschauen, aber in meinem Fall werde ich das jetzt übergehen. Das ist eine Gefahrenquelle. Das ist ganz klar, aber von unserem Beispiel ausreichend. Das heißt, hier wandeln wir einfach das um, was hier eingegeben worden ist in einen Integer, und das war es jetzt. schon Jetzt können wir hier unten irgendwas damit tun. Ich begnüge mich damit irgendwie zuerst mal die Personen zu begrüßen: "Hallo", Leerzeichen, dann hängen wir noch den Namen mit an, dann würde ich sagen, machen wir da noch eine kleine Nettigkeit, ja, anpassend zum Alter jetzt hier eine Ausgabe genieren. Also schreiben wir hier ein, wenn das iAlter < 18, sind wir eigentlich jung frei System.out.println (Sie sind zu jung für diese DVD) macht lieber was Bescheides, so langweile ich euch nicht mit Java. else System.out.println, alle die über 18 sind, wir sind natürlich in perfektem Alter und haben natürlich viel Spaß an Java-Lernen. Das war es. Hier wird also dann eine entsprechende Ausgabe ausgegeben. Lassen wir das auch nochmal kompalieren, geben Sie bitte Ihren Namen ein, versuche ich es mal mit meinem Namen, also schief geht, würde ich Ihren Namen [] Helge Maus. Das habe ich eingegeben. Bitte geben Sie Ihr Alter ein. Na, schauen wir, na ja, ich gebe hier 30 mal ein. Stimmt noch, und hier unten kommt eben raus "Hallo, Helge Maus, perfektes Alter". Und wie war das noch bei der Programmierung, indem wir die Gegenprobe machen. Also geben Sie Ihren Namen ein. Was geben wir da ein? Geben wir vielleicht mal Zoe ein. Ich gebe das Alter ein - 10 Jahre. "Hallo, Zoe. Sie sind zu jung für diese DVD". Sie sehen also, das Ganze läuft, und ich denke, damit ist auch relativ gut erklärt, wie das mit den Strings geht. Ein guter Tipp noch am Ende. Sie haben hier oben einen BufferedReader aufgemacht und einen InputStreamReader. Es ist ganz gut, wenn man die zum Ende auch wieder zumacht, das heißt, wir können uns jetzt hier unten noch da untersetzen und den ganzen Klammer entsprechend hier schließen. Machen wir also hier dann noch schnell unseren BufferedReader hier zu bReader.close. Und damit ist das Ganze auch geschlossen. Sie können es natürlich hier offen lassen. Unser Programm beendet sich an dieser Stelle. Aber wenn Sie später natürlich viele Streams offen haben, dann bleiben die eben geöffnet, und das kann einfach zu Performancelöchern führen. Na ja, guter Tipp, machen Sie die Streams wieder zu!

Jetzt lerne ich Java 6

Steigen Sie ein in die Programmierung mit Java 6, lernen Sie die Grundlagen kennen und unternehmen Sie anschließend Ihre ersten Schritte in der objektorientierten Programmierung.

12 Std. 27 min (98 Videos)
Derzeit sind keine Feedbacks vorhanden...

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!