Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 13. Vorlesung WS 2002/2003.

Ähnliche Präsentationen


Präsentation zum Thema: "Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 13. Vorlesung WS 2002/2003."—  Präsentation transkript:

1 Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 13. Vorlesung WS 2002/2003

2 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/032 Übersicht Besprechung der Hausaufgabe Ein- und Ausgabe in Java –Motivation, Allgemeines –für Text (Character Streams) –für Rohdaten (Byte Streams)

3 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/033 Hausaufgabe Schreibt ein Programm, das einen Kreis (mit Radius 50) an jeder Stelle des Frame erzeugt, an die ihr mit der Maus klickt. Hinweise: –nutzt die "interaktive" Methode paint; die zu zeichnenden Objekte werden in einer LinkedList (Attribut Eures Frames) verwaltet –die Klick-Koordinaten stecken in dem ClickEvent –die Methode repaint() von Frame ruft paint() auf. –Kreise sind spezielle Ellipsen

4 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/034 Wh.: Interaktives Zeichnen in „paint“ bisher: Zeichnen fest in „paint“ programmiert Interaktives Zeichnen: –LinkedList mit Shapes (Attribut des Frame) –„paint“ ruft für jedes Shape in der LinkedList die Methode „draw“ auf –Füllen der LinkedList mit Shapes in anderer Methode (z.B. formMouseClicked(MouseEvent evt)) und neuzeichnen (Methode repaint()).

5 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/035 Wh.: Methode „Paint“ interaktiv public void paint(Graphics g) { Graphics2D g2d = (Graphics2D) g; Iterator It = z.iterator();//z:LinkedList mit Shapes while(It.hasNext()) { Shape s = (Shape) It.next(); //Typkonvertierung g2d.draw(s); g2d.fill(s); }

6 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/036 Lösung der Hausaufgabe import java.awt.*; import java.awt.geom.*; import java.util.*; public class erzeugeKreise extends java.awt.Frame { private LinkedList z = new LinkedList(); void formMouseClicked(java.awt.event.MouseEvent evt) double x=evt.getX(); double y=evt.getY(); Ellipse2D kreis= new Ellipse2D.Double(x-25,y-25,50,50); z.add(kreis); repaint(); } public void paint (Graphics g){/* vorige Folie*/} }

7 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/037 Übungsaufgabe Modifiziert die Hausaufgabe so, dass Liniensegmente interaktiv durch Klicken auf Anfangs- und Endpunkt eingegeben werden können.

8 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/038 Ein- und Ausgabe: Motivation Wo braucht man Ein-/Ausgabe? Einlesen von GIS-Daten aus Transferdateien (GML, EDBS,..) Einlesen von Positionen aus GPS-Empfängern Einlesen von Tachymeter-Daten Senden/Empfangen von Daten über Internet-Verbindung Schreiben von GIS-Daten in Transferdateien Manipulation von Dateien (Lesen, Ändern, Schreiben) Ansteuerung von Geräten....

9 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/039 Allgemeines Java: Umfangreiche Klassenbibliothek für Ein-/Ausgabe Paket: java.io.*; Ein-/Ausgabe sehr fehleranfällig –Aufrufe von Ein- und Ausgabemethoden müssen mit try-catch geklammert werden –entsprechende Exceptions werden ausgelöst –Exceptions sind Unterklassen von der Klasse IOException Stream: Abstraktion der Information, die von Gerät geliefert bzw. an Gerät geschickt wird

10 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0310 Streams und Java-Klassen Unterscheidung nach Art der Daten: –Rohdaten-Streams (Bytes) –Zeichen-Streams (Text) Unterscheidung nach Richtung: –Eingabe-Streams –Ausgabe-Streams Java-Oberklassen: Art des Geräts bzw. Art der Ein-/Ausgabe: Wahl der Unterklasse dieser 4 Oberklassen ZeichenBytes AusgabeWriterOutputStream EingabeReaderInputStream

11 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0311 Ausgabe von Text-Streams

12 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0312 Klassen zur Ausgabe von Text-Streams gepufferte Ausgabe Textausgabe via Outputstreams Basisklasse für Konstruktion von Ausgabe- filtern Textausgabe in Datei Die gleiche Klassenhierarchie existiert auch für Reader Textuelle Ausgabe der Java-Basistypen

13 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0313 Beispiel: Schreiben von Text in Datei import java.io.*; try{ FileWriter fw = new FileWriter("M:\\Java\\Beispiel.txt"); String s = "Dies ist die erste Zeile Text.\n"; fw.write(s); s = "Und dies die zweite.\n" fw.write(s); fw.write("Dies ist die dritte."); fw.close(); } catch(Exception e) { ;} Um in einem String einen Backslash \ einzugeben, müssen zwei \\ hintereinander angeben werden. \n erzeugt Zeilenumbruch

14 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0314 Methoden von der Klasse "FileWriter" FileWriter(String Dateiname) //Konstruktor, erzeugt neue Datei FileWriter(String Dateiname,boolean Anfügen) //Konstruktor; ist Anfügen falsch, so wird Datei gelöscht und //neu geschrieben, sonst wird angefügt write(String s) //schreibt s in Datei ans Ende close() //schließt Stream

15 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0315 Übungsaufgabe Schreibt in eine Datei „zahlen.txt“ auf Eurem Home- Verzeichnis alle Zahlen von 1 bis sowie am Schluss die Summe dieser Zahlen. Jede Zahl soll in einer neuen Zeile erscheinen:

16 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0316 Lesen von Text-Streams hier: nur Lesen aus Dateien Unterschiede hinsichtlich der Menge der Zeichen, die in einem Schritt gelesen werden: –ein Buchstabe –eine Zeichenkette einer bestimmten Länge –eine Zeile –eine Token (Zeichenkette, die von bestimmten Zeichen abgegrenzt werden)

17 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0317 Beispiel: Lesen von Buchstaben aus Textdatei import java.io.*; try{ FileReader fr = new FileReader("M:\\Java\\Beispiel.txt"); int buchstabe; do{ buchstabe = fr.read();//Lesen des nächsten Buchstabens System.out.println("Buchstabe: " + buchstabe); } while (i != -1) //bei -1 Dateiende erreicht fr.close(); } catch(Exception e) { ;}

18 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0318 Beispiel: Lesen von Strings aus Textdatei import java.io.*; try{ FileReader fr = new FileReader("M:\\Java\\Beispiel.txt"); char [] cArray = new char [10]; int anzahlGelesen = fr.read(cArray,0,10); fr.close(); } catch(Exception e) { ;} Gelesene Buchstaben -> cArray max. Anzahl zu lesender Buchstaben Anfangsposition

19 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0319 Beispiel: zeilenweises Lesen aus Textdatei import java.io.*; try{ FileReader fr = new FileReader("M:\\Java\\Beispiel.txt"); BufferedReader br = new BufferedReader(fr); String zeile; do{ zeile = br.readLine(); if( zeile != null ) } while(zeile != null) fr.close(); } catch(Exception e) { ;}

20 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0320 Lesen von Token aus Textdatei Token Delimiter Token

21 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0321 Lesen von Token aus Textdatei Token: Teil eines Stream, der von Delimitern begrenzt wird Beispiel: –Stream: "abc de,f 66,z-2" –Delimiter: {" "} //Leerzeichen Token: abcde,f66,z-2 –Delimiter: {" ",","} //Leerzeichen und Komma Token: abcde f 66z-2 Ziel: Extraktion der Token aus Stream, die bestimmte Bedeutung haben (Parsen) –Abhängig von Menge der Delimiter

22 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0322 Extraktion von Token: Klasse StreamTokenizer Standard-Delimiter: Leerzeichen, Zeilenende, Dateiende,... (können ergänzt werden) Methoden: –StreamTokenizer(Reader): Konstruktor –int nextToken(): schaltet auf nächstes Token um Attribute: –int ttype: Typ des Token TT_EOF: Dateiende TT_EOL: Zeilenende TT_NUMBER : Zahl TT_WORD : String –double nval: Token als double –String sval:Token als String

23 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0323 Beispiel: Lesen von Token aus Textdatei import java.io.*; try{ FileReader fr = new FileReader("M:\\Java\\Beispiel.txt"); StreamTokenizer st = new StreamTokenizer(fr); do{st.nextToken(); switch (st.ttype){ case StreamTokenizer.TT_NUMBER: double d = st.nval; break; case StreamTokenizer.TT_WORD: String s = st.sval; break; default: break;} } while(st.ttype != StreamTokenizer.TT_EOF); fr.close(); }catch(Exception e) { ;}

24 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0324 Lesen von Byte-Streams

25 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0325 Klassen zum Einlesen von Rohdaten (Bytes) Datei (Lesen) zur Interprozess- kommunikation aus Strings lesen gepufferte Eingabe Lesen komprimierter Daten Einlesen von Java Datentypen Die gleiche Klassenhierarchie existiert auch für OutputStreams

26 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0326 Beispiel: Lesen von Bytes aus Datei import java.io.*; try{ FileInputStream fis = new FileInputStream("c:\\java\\IOTEST.class"); System.out.println(„Anzahl Bytes: „ + fis.available()); int b; do{ b = fis.read();//Lesen des nächsten Bytes } while (i != -1) //dann Dateiende erreicht fr.close(); } catch(Exception e) { ;}

27 G. Gröger - Einführung in die Programmierung mit Java - 1. Semester - WS 02/0327 Ende der Vorlesung Vorlesung ist zu Ende, aber Java nicht abschließend besprochen. Unbehandelte Konzepte (u.a.): –Interfaces: Trennung von Schnittstellen und Implementierung –Abstrakte Klassen, Geschachtelte Klassen, anonyme Klassen –Nebenläufigkeit (quasi-Parallelverarbeitung) mittels Threads –Java innerhalb von WWW-Seiten: Applets –Datenbankanbindung Vorschlag: Betrachtung bestimmter Bereiche im Rahmen einer Java-AG im Sommersemester 2003 – und Aushang zu Beginn des Sommersemesters


Herunterladen ppt "Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Gerhard Gröger Einführung in die Programmierung mit Java 13. Vorlesung WS 2002/2003."

Ähnliche Präsentationen


Google-Anzeigen