Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Java-AG Datenstreams: Dateibehandlung, Lesen aus und schreiben in eine Datei.

Ähnliche Präsentationen


Präsentation zum Thema: "Java-AG Datenstreams: Dateibehandlung, Lesen aus und schreiben in eine Datei."—  Präsentation transkript:

1 Java-AG Datenstreams: Dateibehandlung, Lesen aus und schreiben in eine Datei

2 Übersicht Was sind Datenstreams? Lesen von Daten Schreiben von Daten Rückblick „Fehlerbehandlung“

3 Was sind Datenstreams? Kommunikationpfad zwischen Quelle und Ziel eines Informationsblocks Informationsblock selbst bleibt zunächst uninterpretiert, daher beliebige Zeichenfolge möglich Einfachstes Beispiel: Array im Speicher Wichtigste Anwendung: Zugriff auf Dateien

4 Verwendung von Datenstreams alle Klassen (sowohl zum Lesen als auch zum Schreiben von Daten) benötigen das Paket java.io ; es sollte daher am Anfang des Programms importiert werden: import java.io.*;

5 Verwendung von Datenstreams wenn Dateien über das Internet angesprochen werden sollen, wird die Klasse URL benötigt, sie liegt im Paket java.net, das gegebenenfalls importiert importiert werden muß: import java.net.*;

6 Lesen von Dateien Generell erfolgt das Lesen von Byte- Streams durch zwei abstrakte Klassen: Reader und InputStream Methoden bei Reader und InputStream im wesentlichen gleich

7 Methoden zum Lesen von Dateien InputStream liefert eine Folge von Bytes (byte), dabei liegt der Zeichencode „Unicode“ (16 bit pro Zeichen) zugrunde Reader liest eine Folge von Zeichen (char), hierbei wird der Zeichensatz des Rechnersystems genutzt (z.B. ISO-8859-1 in Westeuropa)

8 Methoden zum Lesen von Dateien wichtigste Methode zum Lesen: read () Parameter: Ziel, Offset, Länge r.read(cbuffer, 100, 200); liest aus dem Objekt cbuffer die Zeichen 100 bis 299

9 Weitere Methoden zum Lesen von Dateien Überspringen von Zeichen: skip (long) Status des Datenstreams abfragen: ready () Länge des Streams bestimmen: available ()

10 Weitere Methoden zum Lesen von Dateien Nach Ende des Lesevorgangs Stream schließen, um die Nutzung der Quelle durch andere Ressourcen zu ermöglichen: close ()

11 Lesen aus einem Array Zu verwendende Variante abhängig vom gewünschten Datentyp: ByteArrayInputStream () CharArrayReader ()

12 BufferedInputStream Steigerung der Effizienz durch Vermeidung unnötiges Hardware-Zugriffe: new BufferedInputStream (Ziel) für einen Puffer mit Standardgröße mit (Ziel, int) kann die Größe des Puffers angepaßt werden

13 Spezielle Input-Streams Lesen von Daten aus binären Datenfiles: new DataInputStream (Ziel) Interessant: die speziellen Methoden boolean readBoolean(), byte readByte(), float readFloat(), usw.

14 ObjectInputStream Lesen von Objekten mit ObjectInputStream Methoden analog zu DataInputStream, zusätzlich Object readObject() für Objekte Diese müssen allerdings in den richtigen Typ umgewandelt werden, z.B. d = (Date) in.readObject();

15 Lesen vom Web-Server Zugriff durch Klasse URL: URL url; try { url = new url („http....“); in =new BufferedInputStream (url.openStream() );....} catch...

16 OutputStream Öffnen des OutputStreams : new FileOutputStream (filename, true/false); zusätzliche Option Appendmode ( true/false ) ab JDK 1.1, wobei false eine neue Datei erzeugt und true die Informationen an eine bereits existierende Datei anhängt

17 Methoden des OutputStreams write(int); schreibt ein Byte mit angegebenem Wert write(byte[]); write(byte[], offset, length); schreibt alle im byte -Array bzw. im Teilbereich des byte -Array enthaltenen Bytes

18 Methoden des OutputStreams flush() sorgt dafür, daß alle eventuell noch im Puffer wartenden Bytes tatsächlich in die Datei geschrieben werden Sollte immer vor close() oder einem Abbruch des Programms aufgerufen werden

19 Spezielle OutputStreams BufferedOutputStream (Ziel) funktioniert analog zu BufferedInputStream. Auch hier ist die Angabe der Puffergröße als int möglich.

20 Spezielle OutputStreams DataOutputStream (Ziel) zum Schreiben von binären Datenfiles Plattformunabhängig Daten für DataInputStream nutzbar Methoden: writeBoolean(boolean); writeByte(int); writeBytes(String); etc.

21 Spezielle OutputStreams ObjectOutputStream (Ziel) wie DataOutputStream, zusätzlich writeObject(Object) Auch hier: Object ist Superklasse für alle Klassen, Object kann also beliebig sein Bsp: Date d;... Out.writeObject(d);

22 Writer Analog zu FileReader, BufferedReader, und InputStreamReader existieren FileWriter, BufferedWriter und OutputStreamWriter PrintWriter enthält zusätzlich Methoden zur Umwandlung von Zahlen und Objekten für print und println

23 RandomAccessFile RandomAccessFiles erlauben neben den üblichen Stream-Methoden (read, write, flush, close) auch das „Springen“ an bestimmte Stellen innerhalb des Files.

24 RandomAccessFile long getFilePoint() liefert die aktuelle Position während des Lesens/Schreibens innerhalb des Files long lenght() Liefert die Länge des Files seek (long) setzt den FilePointer auf eine bestimmte Stelle für das nächste read oder write

25 Exceptions alle Fehler bei Dateizugriffen sollten mit try {...} catch {...} finally {Streamname.close()} abgefangen werden, um Probleme bei späteren Dateizugriffen zu vermeiden

26 EOFException Fast alle read -Methoden werfen am Ende des Files ein EOFException aus: try { while (true) {..Streamname.read..} catch {EOFException e} finally {Streamname.close()}

27 Exceptions auch beim Erzeugen des Datenstreams sollte man auf Nummer sicher gehen: Reader r = tryToMakeNewReader (); if (r != null) try {...} catch {...} finally {r.close()}

28 Aufgabe Schreibt ein kurzes Programm, daß die Datei index.html im Verzeichnis /HOWTO/HOWTO-INDEX auf dem HTTP-Server www.linuxdoc.org einliest.

29 Lösung Zunächst werden die Pakete importiert: import java.io.*; import java.net.*; Danach werden die Variablen deklariert: URL url; RandomAccessFile einlesen;

30 Lösung (2) In der äußeren TRY/CATCH-Anweisung wird die Zieladresse geöffnet: try { url = new url(„http://www. linuxdoc.org/HOWTO/HOWTO- INDEX/index.html“); Dann wird der Datenstrom geöffnet: einlesen = new RandomAccessFile(url.openStream() );

31 Lösung (3) Die innere TRY/CATCH-Anweisung schützt den eigentlichen Lese-Vorgang: try { while (true){einlesen.read()} } Fehler werden abgefangen, in jedem Fall wird der Lese-Vorgang abgeschlossen: catch (EOFException e) { System.out.println("error "+e) } finally {einlesen.close()} }

32 Lösung (4) Jetzt wird noch die äußere CATCH-Anweisung ausgewertet und zu Ende gebracht: catch (Exception e) { System.out.println("error "+e); } Und der Datenstrom geschlossen: finally {url.closestream()};


Herunterladen ppt "Java-AG Datenstreams: Dateibehandlung, Lesen aus und schreiben in eine Datei."

Ähnliche Präsentationen


Google-Anzeigen