Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

8.06.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 1 Ein- und Ausgabe in der Programmiersprache Java.

Ähnliche Präsentationen


Präsentation zum Thema: "8.06.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 1 Ein- und Ausgabe in der Programmiersprache Java."—  Präsentation transkript:

1 8.06.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 1 Ein- und Ausgabe in der Programmiersprache Java

2 8.06.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 2 Ein- und Ausgabe in Java Ein- und Ausgabe wird mit sogenannten Streams realisert Streams sind immer unidirektional Die Klasse java.io stellt verschiedene Klassen zur Verfügung die auf dem Streamkonzept basieren Schreiben Daten Stream Lesen

3 8.06.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 3 Die abstrakte Klasse InputStream Die Klasse InputStream beschreibt allgemeine Methoden zum Lesen von Daten Methoden der Klasse InputStream read() liest ein Byte vom InputStream available() gibt die Anzahl an Bytes zurück, die gelesen werden können close() schließt den InputStream read(byte[]) liest soviele Bytes aus der Datei, wie ein Feld Elemente hat Methode read() ist abstrakt, und muß von allen Subklassen implementiert werden Standardeingabe von Java ist ein Beispiel eines InputStreams Klassenvariable in der Klasse System enthält eine Referenz auf eine Implementierung der Klasse InputStream

4 8.06.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 4 Standardeingabe read() liefert einen Integerwert zurück, obwohl es nur ein Byte an Informationen enthält try { int val = System.in.read();... } catch ( IOException e ){ } überladene read()-Methode zum Füllen einer Reihung byte [] bity = new byte [1024]; int got = System.in.read( bity ); Abfrage der im InputStream enthaltenen Zeichen durch available() int waiting = System.in.available(); if(waiting > 0) { byte [] data = new byte [waiting]; System.read( data );...}

5 8.06.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 5 Unterklassen der Klasse InputStream InputStream PipedInputStream FileInputStream FilterInputStream ByteArrayInputStream SequenceInputStream StringBufferInputStream DataInputStream BufferedInputStream LineNumberInputStream PushbackInputStream

6 8.06.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 6 Die Klasse DataInputStream Mit Hilfe eines DataInputStreams können einfache Datentypen binär gelesen werden readBoolean(); readByte(); readChar(); readDouble(); readFloat(); readInt(); readLine(); readLong(); readShort(); Konstruktor erwartet einen InputStream als Parameter public DataInputStream(InputStream is);

7 8.06.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 7 Die Klasse BufferedInputStream Daten werden blockweise in einen Puffer gelesen, auf dem bei jeder Leseaktion zugegriffen wird BufferedInputStream bis = new BufferedInputStream(mInputStream, 4096);... bis.read(); BufferedInputStream ermöglicht Daten zu lesen, ohne bei jeden Aufruf physikalisch auf das Gerät zuzugreifen BufferedInputStream enthält die Methoden mark() zum markieren einer Position im Puffer reset() zur Zurückführung des Pufferzegers auf die letzte Markierung

8 8.06.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 8 Beispiel import java..io.*; public class firstIO{ public static void main(String [] args){ int value; try { DataInputStream in = new DataInputStream( new BufferedInputStream( new FileInputStream( ´´intData´´ ))); value = in. readInt(); System.out.println(value); } catch( IOException e){ System.err.println(e); } }

9 8.06.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 9 Die abstrakte Klasse OutputStream Die Klasse OutputStream beschreibt allgemeine Methoden zum Schreiben von Daten. Methoden der Klasse: write(int) schreibt ein Byte auf den Stream write(byte[]) schreibt ein Feld von Bytes auf den Stream flush() schreibt gepufferte Daten, falls Puffer genutzt werden close() schließt den OutputStream Die Methode write() ist abstrakt und muß deshalb von allen Subklassen implementiert werden Standardausgabe und Standardfehlerausgabe sind Beispiele eines OutputStreams Klassenvariablen out und err der Klasse System enthalten eine Referenz auf eine Implementierung der Klasse OutputStream

10 8.06.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 10 Unterklassen der Klasse OutputStream PipedOutputStream FileOutputStream FilterOutputStream ByteArrayOutputStream DataOutputStream BufferedOutputStream LineNumberOutputStream PushbackOutputStream OutputStream PrintStream

11 8.06.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 11 Die Klasse PrintStream überladene print() bzw. println()-Methode, die Argumente in eine Zeichenkette umwandelt und dann auf dem Stream ausgibt Standard- und Standardfehlerausgabe von Java ist ein Beispiel eines PrintStreams Klassenvariablen out und err der Klasse System enthalten eine Referenz auf ein Objekt der Klasse PrintStream System.out.print(´´Hello world...\n´´); System.out.println(´´Hello world...´´); System.out.println(´´The answer is ´´ + 17); Methoden der Klasse PrintStream lösen keine IOException aus System.out.println(reallyLongString); if( System.out.checkError() );

12 8.06.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 12 Die Klasse BufferedOutputStream Daten werden in einen Puffer geschrieben, dessen Inhalt nur dann in den Stream geschrieben wird, wenn er voll ist BufferedOutputStream bos = new BufferedOutputStream(myOutputStream 4096);... bis.write(); BufferedOutputStream ermöglicht Daten zu schreiben, ohne bei jeden Aufruf physikalisch auf das Gerät zuzugreifen explizites Leeren des Puffers mit flush()

13 8.06.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 13 Die Klasse DataOutputStream Mit Hilfe eines DataOutputStreams können einfache Datentypen binär geschrieben werden writeBoolean(); writeByte(); writeChar(); writeDouble(); writeFloat(); writeInt(); writeLine(); writeLong(); writeShort(); Konstruktor erwartet einen Outputstream als Parameter public DataOutputStream(OutputStream is);

14 8.06.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 14 Pipelines Mit den Klassen PipedInputStream und PipedOutputStream können zwei gegensätzliche Streams verbunden werden PipedInputStream pin = new PipedInputStream(); PipedOutputStream pout = new PipedOutputStream(pin); pin.read(); pout.write(); Pipelines werden von Threads zur Kommunikation verwendet Threads können mit write() und read() auf die Pipeline zugreifen Schreibversuch auf einen vollen Puffer => der ´´schreibende´´ Thread wird in den ´´wartenden´´ Zustand geführt Leseversuch auf einen leeren Puffer => der ´´lesende´´ Thread wird in den ´´wartenden´´ Zustand geführt

15 8.06.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 15 Die Klassen StringReader und StringWriter Die Klasse StringReader erlaubt uns eine Zeichenketten als Stream zu behandeln String data = ´´There once was a man from Nantucket...´´; StringReader sr = new StringReader( data ); char T = (char)sr.read(); char h = (char)sr.read(); char e = (char)sr.read(); Die Klasse StringWriter erlaubt uns eine Zeichenkette über ein Stream zu erzeugen StringWriter buffer = new StringWriter(); PrintWriter out = new PrintWriter( buffer ); out.println(´´A moose once bit my sister.´´ ); out.println(´´No, really!´´); String results = buffer.toString();

16 8.06.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 16 Die Klasse File Objekt-File wird zur Abfrage von Informationen genutzt Die Klasse File enthält Methoden Auflisten von Dateien und Verzeichnissen Prüfen, ob eine Datei existiert/lesbar/ schreibbar Umbenennen und Löschen von Dateien bzw. Verzeichnissen Anwendung von Methoden der Klasse File File fooFile = new File(´´/tmp/boofa´´); String type = fooFile.isFile() ? ´´File´´ : ´´Directory´´; String name = fooFile.getName; long len = fooFile.length(); System.out.println(type + name ´´,´´ + len + ´´bytes´´); Die Klasse File enthält eine Methode zum Anlegen von Verzeichnissen, nicht aber von Dateien

17 8.06.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 17 Methoden der Klasse File boolean canRead() - testet, ob die Datei lesbar ist boolean canWrite() - testet, ob die Datei beschreibbar ist boolean delete() - löscht die Datei (bzw. das Verzeichnis) boolean exists() - testet, ob die Datei existiert boolean renameTO(File) - benennt die Datei um boolean mkdir() - erzeugt ein Verzeichnis boolean mkdirs() - erzeugt einen Verzeichnisbaum String [] list() - liefert eine Liste von Dateien des Verzeichnisses String getAbsolutePath(), String getPath() - liefert den entsprechenden Pfad der durch File beschriebenen Datei zurück String getname() - gibt den Namen der Datei zurück boolean isFile(), boolean isDirectory() - Rückgabe der Dateiart

18 8.06.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 18 Lesen- und Schreiben von Dateien Die Klassen FileInputStream und FileOutputStream enthalten Methoden zum Lesen und Schreiben von Dateien FileInputStream bzw. FileOutputStream erweitern die Klassen InputStream bzw. OutputStream Anlegen eines FileInputStreams FileInputStream fools = new FileInputStream( fooFile ); FileInputStream fools = new FileInputStream( ´´/etc/passwd´´ ); Anlegen eines FileOutputStreams FileOutputStream fools = new FileOutputStream( fooFile,true ); FileOutputStream fools = new FileOutputStream( ´´/etc/passwd´´,true ); FileInputStream und FileOutputStream können in höhere Ein- und Ausgabestreams gepackt werden

19 8.06.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 19 Beispiel File file = new File( args[0]); if(!file.exists() || !file.canRead()) { System.out.println(´´Kann Datei ´´ + file + ´´ nicht lesen!´´); return; } if( file.isDirectory() ) { String [] files = file.list(); for(int i = 0; i < files.length; i++) System.out.println( files[i] ); } else { try{ FileReader fr = new FileReader( file ); BufferedReader in = new BufferedReader( fr ); String line; while( line = in.readLine() != null ) System.out.println( line ); } catch( FileNotFoundException e){ System.out.println( ´´Fehler´´); }

20 8.06.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 20 Die Klasse RandomAccessFile Klasse RandomAccessFile enthält Methoden mit der auf Dateien an beliebigen Stellen zugegriffen werden kann RandomAccessFile implementiert sowohl DataInput als auch DataOutput Anlegen eines RandomAccessFiles try { RandomAcessFile users = RandomAccessFile( ´´Users´´,´´rw´´);... } catch( IOException e ){ } automatisches Anlegen einer Datei, wenn RandomAccessFiles als schreibend definiert ist seek(), getFilePointer() und length() zur Steuerung von RandomAccessFiles


Herunterladen ppt "8.06.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 1 Ein- und Ausgabe in der Programmiersprache Java."

Ähnliche Präsentationen


Google-Anzeigen