So und schon sind wir bei der zweiten Vorlesung
Begonnen hat das Ganze damit, dass wir die Lösung der Aufgabe vorzeigen sollten von letzter Woche. Glücklicherweise war meine Lösung richtig und ich wurde abgehakt (Yeyy!). Ich muss schon sagen, dass ich momentan wirklich ernsthaft versuche mich anzustrengen und auch das Skript mehr bewusst durchzugehen, anstatt es „nur“ durchzulesen. Nimmt zwar sehr viel Zeit in Anspruch, aber es ist ein wirklich gutes Gefühl, wenn man eine Aufgabe liest und eigentlich gleich weiß, was man machen muss. Das habe ich heute dann auch gemerkt.
Ich hatte mir vorgenommen ab der zweiten Vorlesung wirklich überhaupt nicht abgelenkt zu werden und durchgehend aufmerksam zuzuhören (auch wenn das vor allem von zu Hause aus sehr schwer ist).
Nachdem viele von uns ihre Lösungen vorgezeigt hatten, machten wir mit dem Thema von letzter Woche weiter und wiederholten noch einmal das Wichtigste.
Was ich vergessen hatte in der letzten Woche zu erwähnen ist, dass Objekte in der Reihenfolge gelesen werden, in der sie ursprünglich geschrieben wurden mit readObject(). Also auch in der Programmierung gibt es ein FIFO Verfahren.
Heute nahmen wir uns dann aber eher einfache Textdateien vor (also eigentlich Strings). Das ähnelt dem Schreiben eines Objekts bis auf, dass man eben einen String statt einem Objekt und einen FileWriter anstatt einem FileOutputStream benutzt:
Objekt schreiben: objectOutputStream.writeObject(einObject);
Einen String schreiben: fileWriter.write(„Hallo!“);
um das in einem etwas ausführlicheren Code zu zeigen:

Dazu haben wir auch folgendes Bildchen gemalt, welches das Ganze noch einmal unterstützt:

über writer.write wird der Text dann in das Dateisystem gestreamt
Die Klasse java.io.File repräsentiert eine Datei auf einem Datenträger , aber nicht den Inhalt der Datei. Ein File-Objekt ist so etwas wie der Pfadnamen einer Datei und nicht die Datei selbst.
Hier auch noch einmal ein Bildchen, um das besser zeigen zu können:

Deshalb können wir auch nicht einfach in die Datei schreiben, sondern brauchen den File-Writer
Was man auch mit einem File-Objekt machen kann ist:
- eines erzeugen, das eine vorhandene Datei repräsentiert: File f = newFile („MeinCode.txt“);
- Ein neues Verzeichnis anlegen: File dir = new File („bla“); dir.mkdir(); das erzeugt das Verzeichnis bla im aktuellen Pfad
- Den Inhalt eines Verzeichnisses auflisten:

4. oder ganz einfach die Datei, oder das Verzeichnis mit f.delete (); löschen
Danach haben wir noch etwas Prkatisches kennengelernt, das man Buffer nennt. Wenn man jedes mal warten müsste, bis die Daten auf der Festplatte sind, würde das eine ganze Weile dauern. Deshalb gibt es einen „Puffer“, der wie ein Einkaufswagen funktioniert. Man lädt erst alles in den Einkaufswagen und geht dann zur Kasse gesammelt mit allen Gegenständen, die man kaufen möchte. So geht das auch mit dem Puffer speicher. Man kann damit alles zwischenspeichern, bis das Behältnis voll ist. Auch der BufferedWriter hat eine Methode write.
Und so funktioniert das Ganze:

das folgende Code-Beispiel zeigt, wie eine Text-Datei gelesen werden kann:

Das Beispiel hatten wir auch ziemlich ausführlich besprochen. Der Code in der why-Schleife sagt so viel wie: Lies die Textzeile, weise sie der Variablen zeile zu und vergleiche dann, ob sie ungleich null ist. Ist sie das, dann gib die Zeile aus. Danach wird der reader geschlossen.
In der zweiten Vorlesung haben wir ziemlich viele Bildchen gemalt, denn hier folgt noch eines, das den oben gezeigten Code ein wenig besser erklärt:

Das ist die Erklärung was in den drei ersten Zeilen des try-Befehls steht.
Als nächstes kam eine kleine Aufgabe zum Denken. Diese hieß was ist erlaubt. Das sind die Lösungen und ich erkläre anschließend, warum das nicht geht:

Das erste Beispiel funktioniert nicht, da die Dateiangabe fehlt. Somit kann gar keine Datei gelesen werden.
Das letzte Beispiel funktioniert nicht, da ein FileOutputStream geschrieben wurde und kein FileInputStream. Beim Lesen einer Datei muss ein FileInputStream verwendet werden, da ja etwas „hinein“ strömt.
Danach folgte eine etwas größere Aufgabe zum Programmieren:

Da ich heute wirklich sehr gut aufgepasst hatte, wusste ich gleich was zu tun war und musste nicht mehr großartig in den Folien suchen.
Nun ein Bild von meiner Lösung:

Zuerst hatte ich eine Textdatei namens „programmieren.txt“ geschrieben, die dann eingelesen wurde. Die Datei wurde dann zum Einen, so lange bis die Zeilen ungleich null sind, ausgegeben und eine Kopie, mit dem Namen „programmieren2.txt“, dieser Datei wurde in dasselbe Verzeichnis geschrieben. Damit der Text Zeile für Zeile in die Textdatei geschrieben wird, benutzt man die Methode newLine(). Als Hilfe, falls das mit dem BufferedWriter doch nicht so funktioniert hätte, habe ich zur Sicherheit noch die Methode flush() hinzugefügt, die sichert, dass die Textdatei vom BufferedWriter auch wirklich geschrieben wurde( da es sich ja um eine Puffer speicher handelt und dieser wirklich „geleert“ sein muss, damit die neue Textdatei dann in das Verzeichnis geschrieben wird)
Anschließend sind wir relativ schnell über die letzteren Folien gegangen, deshalb werde ich diese auch nur kurz anreißen. Hier nun noch die wichtigsten Stichpunkte für dieses Thema:
- public boolean creatFile () legt eine neue Datei mit dem Namen des File-Objekts an
- public boolean mkdir() legt ein neues Verzeichnis mit dem Namen des Files an
- public void close() schließt den Strom
- public void flush() leert einen eventuellen Puffer des Writer-Objekts durch die sofortige Abarbeitung aller noch anstehenden Zeichen
und hier auch noch einmal für mich selbst zum Nachschauen ein paar wichtige Klassen erklärt:


Ebenso kurz angerißen hatten wir, dass es RandomAccessFiles gibt, die den wahlfreien Zugriff auf Dateien ermöglicht.
Das war es dann mit dem ersten Teil der Vorlesung und an den zweiten setze ich mich auch gleich