1 / 38

Einführung in die Programmierung mit Java

Einführung in die Programmierung mit Java. 12. Vorlesung WS 04/05. Übersicht. Fehlerbehandlung Schreiben in Dateien Lesen aus (Text-)Dateien zeilenweise Lesen von Token ("Parsen"). Laufzeitfehler in Java.

ludwig
Download Presentation

Einführung in die Programmierung mit Java

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Einführung in dieProgrammierung mit Java 12. Vorlesung WS 04/05

  2. Übersicht • Fehlerbehandlung • Schreiben in Dateien • Lesen aus (Text-)Dateien • zeilenweise • Lesen von Token ("Parsen") IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  3. Laufzeitfehler in Java • Viele Fehler werden vom Compiler aufgedeckt (z.B. fehlendes Semikolon, nicht deklarierte Variable) • Andere Art von Fehler: Laufzeitfehler • tritt während der Ausführung des Programms auf • unterbricht den normalen Fluss der Befehle (Programm stützt ab) • Name dieser Fehler: Ausnahme (engl. Exception) • Beispiele für Ausnahmesituationen: • bei Berechnungen Division durch Null • Mangel an Speicherplatz • Zugriff auf Array-Elemente über die Obergrenze hinaus • Schreib-/Lesefehler bei Ein- und Ausgabeoperationen • Diskette defekt • Netzwerkverbindung zusammengebrochen • Festplatte voll • zu öffnende Datei nicht vorhanden usw. IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  4. Fehler während des Ablaufs- Beispiel - public class Polygon { private Punkt[] eckpunkt; public Polygon(){ super(); } public void leeres_Polygon( int anzahl_eckpunkte){ eckpunkt = new Punkt[ anzahl_eckpunkte]; } public void punkt_einfuegen( int position, Punkt punkt){ eckpunkt[ position] = punkt; } } mögliche Fehler negative Anzahl Position außerhalb des Arrays Array noch nicht angelegt IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  5. Laufzeitfehler: Beispiel ................................ int[ ] a; a = new int[2]; a[0] = 5; a[1] = 6; a[2] = 6; //Fehler IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  6. Abfangen des Fehlers: try-catch Anweisungen, bei denen ein Fehler auftreten kann. ................................ try{ int[ ] a; a = new int[2]; a[0] = 5; a[1] = 6; a[2] = 6; } catch(java.lang.Exception e){ System.out.println("Fehler: Arraygrenze überschritten"); } Anweisungen, die ausgeführt werden, sobald ein Fehler aufgetreten ist hier geht es in jedem Fall weiter IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  7. Ausnahmebehandlung in Java • Vorteile der Java-Ausnahmebehandlung • Programm stürzt nicht ab • Programm macht an genau definierter Stelle weiter • systematische und übersichtliche Trennung von normalem und fehlerbehandelndem Code • Im Falle einer Ausnahme wird ein sog. Exception-Objekt erzeugt und weitergeleitet • Instanz der Klasse Exception oder von Unterklasse • Exception-Objekt erhält Information über Ausnahme • Exception-Objekt wird mit catch gefangen (Fehlerbehandlung) IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  8. Exceptions: Klassen-Hierarchie Throwable (from lang) Exception (from lang) ArrayIndexOutOfBoundsException IOException ArithmeticException (from lang) (from io) (from lang) FileNotFoundException (from io) IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  9. Exception-Klassen I/II Exception Der universelle Vater aller Fehlermeldungen. Von dieser Klasse sind alle anderen abgeleitet. NullPointerException ( extends Exception) Tritt auf, wenn ein Objekt benutzt werden soll, obwohl es noch nicht angelegt wurde. Beispiel : Student student; student.drucke_ausweis(); IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  10. ClassCastException ( extends Exception) Tritt auf, wenn ein Objekt mittels expliziter Typenkonvertierung in eine Typ umgewandelt wird, welcher nicht zu seinen Ahnen gehört Beispiel : Student student = new Student(“Dirk“,“Dörschlag“); Dozent dozent = (Dozent) student; Exception-Klassen II/II ArrayIndexOutOfBoundsException ( extends Exception) Tritt auf, wenn auf ein Arrayelement zugegriffen wird, das nicht existiert. Beispiel : Student student = new Student[2] Student student[3] = new Student(“Dirk“,“Dörschlag“); IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  11. Differenzierte Fehlerbehandlung • in try-Block können verschiedene Arten von Fehlern auftreten • differenzierte Behandlung sinnvoll • Lösung: • mehrere catch-Anweisungen, eine für jeden Fehlertyp • Unterscheidung anhand des Namens des Fehlers (der Exception) IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  12. Fang den Fehler und handle- Differenzierung nach Fehlertyp - Anweisungen, bei denen ein Fehler auftreten kann. Syntax : try{ anweisung(en); } catch( Fehlertyp_1 f1){ anweisung(en); } catch( Fehlertyp_2 f2){ anweisung(en); } Anweisungen, die ausgeführt werden, sobald ein Fehlertyp_1 aufgetreten ist Anweisungen, die ausgeführt werden, sobald ein Fehlertyp_2 aufgetreten ist IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  13. Fang den Fehler und handle- try{ anweisung } catch ( fehler ) { warnung } - public class Polygon { public void punkt_einfuegen( int position, Punkt punkt){ try{ eckpunkt[ position] = punkt; } catch( NullPointerException npe){ System.out.println(“Polygon.punkt_einfuegen()“+ “::Eckpunkte nicht angelegt!“); } catch( Exception e){ System.out.println(“Polygon.punkt_einfuegen()“+ “::Ein Fehler wurde erkannt!“); } } } IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  14. Mehrere Catch-Klauseln • die in der Reihenfolge erste catch-Klausel, die passt, wird verwendet • dann ist try-catch beendet • Beispiel: try{ eckpunkt[ position] = punkt; } catch( Exception e){.....} catch( NullPointerException npe){....}; //Zweite catch-Klausel wird nie erreicht • Daher: Zuerst die speziellere, dann die allgemeinere Exception IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  15. Weiterleiten von Exceptions • Bisher: Fehler in try{...} wurde in catch(..){...}abgefangen und behandelt • Alternative: Weiterleiten des Fehlers in einer Methode m nach oben an die Methode, die m aufruft • dort muss Fehler mit try-catch behandelt werden oder wiederum an die aufrufende Methode weitergeleitet werden • die Methode m muss dies durch throws-Klausel kenntlich machen. Beispiel: public void leeres_Polygon( int anzahl_eckpunkte) throws Exception{ eckpunkt = new Punkt[ anzahl_eckpunkte]; } IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  16. Fehlermeldungen weiterleiten- Syntax - Syntax : modifierclass Klassenname { ... modifier rueckgabetyp methodenname( parameter) throws Fehlertyp_1(, Fehlertyp_2, ...) { anweisung(en); } ... } die Methode wird an der Stelle abgebrochen, an der der Fehler auftritt ! IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  17. Fehlermeldungen weiterleiten- Beispiel - public class Polygon { private Punkt[] eckpunkt; ... public void leeres_Polygon( int anzahl_eckpunkte) throws Exception{ eckpunkt = new Punkt[ anzahl_eckpunkte]; } ... } IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  18. Übung im GIS-Labor • Macht das folgende Programm mittels try {...} catch (Exception e) {...} absturzsicher und gebt bei einem Fehler eine Fehlermeldung aus (Tip: nutzt die Methode printStackTrace() von Exception) class Ereignis1 { public static void main (String args[]) { int a; int b = 0; a = 10/b; System.out.println("Programmende wurde erreicht!"); } } IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  19. Schreiben in/Lesen aus Text-Dateien Messwerte Mein Programm Ergebnisse PNR X Y Z IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  20. Schreiben in Datei: Beispiel I import java.io.*; ........ try{ FileWriter fr = new FileWriter("d:\\tmp\\log.txt"); fr.write("Dieser Text steht in der ersten Zeile der "); fr.write("Datei log.txt.\n"); fr.write("Und dieser in der zweiten."); fr.close(); } catch(Exception e){} IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  21. Schreiben in Datei • Öffnen der Datei: Erzeugen einer Instanz der Klasse "FileWriter" • Dateiname als Parameter des Konstruktors • Scheiben: Aufruf der Methode write(...) für Instanz von FileWriter (Analog zu System.out.println) • wenn fertig mit schreiben: Aufruf der Methode close() für Instanz von FileWriter • alles muss in try{ ..} stehen (da fehleranfällig) • Package "java.io" muss importiert werden IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  22. Schreiben in Datei: Beispiel II import java.io.*; ........ try{ //der folgende Konstruktor ermöglicht das Anfügen von // Text am Ende der Datei (falls diese vorhanden ist) FileWriter fr = new FileWriter("d:\\tmp\\log.txt",true); fr.write("...."); fr.close(); } catch(Exception e){} IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  23. Gepuffertes Schreiben • Datei zum schreiben öffnen: • BufferedWriter bw = new BufferedWriter (new FileWriter(“Dateiname“)); • FileWriter ermöglicht das Schreiben von Dateiinhalten. • BufferedWriter puffert das Schreiben. Es wird nur noch in die Datei geschrieben, wenn die Methode flush() oder close() aufgerufen wird.  bessere Performance ! IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  24. Lesen von Dateien • allgemein: Lesen von Streams • Stream: Abstraktion der Information, die von Gerät geliefert bzw. an Gerät geschickt wird • hier: nur Lesen aus (Text-)Dateien • Unterschiede hinsichtlich der Menge der Zeichen, die in einem Schritt gelesen werden: • ein Buchstabe: FileReader • eine Zeichenkette einer bestimmten Länge • eine Zeile: BufferedReader • eine Token (Zeichenkette, die von bestimmten Zeichen abgegrenzt werden): StreamTokenizer IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  25. Zeichenweises Lesen aus Dateien • Datei zum lesen öffnen: FileReader fr = new FileReader(“Dateiname“); • FileReader ermöglicht das zeichenweise Lesen von Dateiinhalten • unpraktisch für ASCII-Dateien mit Messwerten oder Texten • besser: Erzeugen eines BufferedReader aus FileReader IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  26. Zeilenweises Lesen aus Dateien • Datei öffnen: BufferedReader br = new BufferedReader(new FileReader(“Dateiname“)); • BufferedReader fasst die Zeichen aus dem FileReader zu Zeichenketten zusammen • Der BufferedReader verfügt u.a. über die Methoden • readLine(): auslesen der nächsten Zeile (bis zum nächsten Zeilenumbruch) in einen String • close(): schließen der Datei • Weitere Methoden: JavaDoc IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  27. Java und ASCII-Dateien- öffnen und (ein-)lesen - Beispiel : import java.io.*; ................................. BufferedReader br; String line; int i = 0; try{ br = new BufferedReader(new FileReader("c:\\Koordinaten.txt")); while( (line = br.readLine()) != null){ //für jede Zeile wird Konstruktor von von Punkt aufgerufen punkt[i] = new Punkt( line); i = i+1; } br.close(); } catch( FileNotFoundException fnfe){ System.out.println(“The file :‘“+ filename +“‘ does not exist“); } catch( IOException ioe){ ioe.printStackTrace(); } IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  28. Lesen von Token aus Textdatei Token Delimiter Delimiter Token IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  29. Lesen von Token aus Textdatei • Token: Teil eines Strings (Stream), der von Delimitern begrenzt wird • Beispiel: • String: "abc de,f 66,z-2" • Delimiter: {" "} //Leerzeichen • 3 Token: abc de,f 66,z-2 • Delimiter: {" ",","} //Leerzeichen und Komma • 5 Token: abc de f 66 z-2 • Ziel: Extraktion der Token aus String, die bestimmte Bedeutung haben (Parsen) • Abhängig von Menge der Delimiter IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  30. Extraktion von Token: Klasse StreamTokenizer • Standard-Delimiter: Leerzeichen, Zeilenende, Dateiende, ... (können ergänzt werden) • Methoden von StreamTokenizer: • StreamTokenizer(Reader): Konstruktor • int nextToken(): schaltet auf nächstes Token um • Attribute eines Token: • 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 IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  31. Beispiel: Lesen von Token aus Textdatei import java.io.*; ................ try{ FileReaderfr = new FileReader("M:\\Java\\Beispiel.txt"); StreamTokenizerst = new StreamTokenizer(fr); double d; String s; while(st.nextToken() != StreamTokenizer.TT_EOF){ switch (st.ttype){ case StreamTokenizer.TT_NUMBER: d = st.nval; break; case StreamTokenizer.TT_WORD: s = st.sval; break; default: break;} //hier kann mit d und s etwas gemacht werden } fr.close(); }catch(Exception e) { ;} IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  32. Extraktion von Token: Klasse StringTokenizer • ähnlich zu StreamTokenizer • arbeitet auf Strings (z.B. Zeile aus Textdatei) • Konstruktor (zu parsender String und Delimiter):StringTokenizer st = new StringTokenizer(str,";"); • Methoden: • boolean hasMoreTokens() • String nextToken() • importieren des Package java.util IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  33. StringTokenizer: Beispiel try{ StringTokenizer st = new StringTokenizer("ABC;DEF;GH",";"); while(st.hasMoreTokens()){ System.out.println(st.nextToken()); } } catch(Exception e) {e.printStackTrace();} //Ausgabe: //ABC //DEF //GH IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  34. Exkurs: Konvertieren von Strings • Konvertieren von Strings in double: Double.parseDouble. Beispiel:String s = "4.6566";double d = Double.parseDouble(s); //nun steht in d die Zahl 4.6566 IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  35. ENDE FRAGEN ? IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  36. Hausaufgabe Lest aus der Datei "zahlen.txt" die 6 Zahlen ein und gebt die Summe dieser 6 Zahlen in eine Datei "ergebnis.txt" aus. Datei "zahlen.txt": 7.99 4.98 2.77 2.0 22.99 43.98 IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  37. Fortgeschrittene Übungsaufgabe (1/2) Ergänze die Klasse Polygon (Vorlesung 11) um eine Methode, die die Datei "polygon.txt" (nächste Folie) einliest und daraus ein Polygon mit 5 Punkten erzeugt. In einer Zeile dieser Datei steht die Punktnummer, die x-Koordinate und die y-Koordinate eines Punktes. Teste die Funktionen in einer Klasse Test_Main. IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

  38. Fortgeschrittene Übungsaufgabe (2/2) Datei polygon.txt 1 2.0 3.0 2 4.0 3.0 3 8.0 9.0 4 7.0 10.0 5 1.0 6.0 IKG; Dörschlag, Plümer, Gröger; Einführung in die Programmierung mit Java WS03/04

More Related