PROG2: Einf uhrung in die Programmierung f ur ...Listener-Pattern ist Spezialform des...

Preview:

Citation preview

Exceptions und I/O-Streams in Java

PROG 2: Einfuhrung in die Programmierungfur Wirtschaftsinformatiker

Steffen HelkeTechnische Universitat Berlin

Fachgebiet Softwaretechnik

29. April 2013

Ubersicht

Wiederholung: Ereignisbehandlung in einer GUI

Fehlerbehandlung mit Exceptions

Ein- und Ausgabestreams

Teil I der Vorlesung PROG2

Entwicklung grafischer Schnittstellen

Graphical User Interface

– Ereignisbehandlung in einer GUI –

Quelle: Inhalt & Gestaltung nach Vorlesungsfolien von Peter Pepper und Odej Kao, TU Berlin

Methodische- und Praktische Grundlagen der Informatik 4 (MPGI 4), WS 2010/11 bzw. WS2011/12

Ereignisbehandlung (Event handling)

Intention

Festlegung, was passieren soll, wenn GUI-Eingaben erfolgen

Konzepte zur Umsetzung

Erzeugung von Ereignissen (Events, z.B. ESC-Taste Drucken)

Belauschen der Ereignisse mit speziellen Objekten (Listener)

Definition von Eventcode (Ereignisbehandlung)

Ereignisempfänger

z.B. JFrame−Objekt

Ereignisquelle

z.B. KeyListener−Objekt

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 1

Entwurfsmuster zur Ereignisbehandlung

Varianten

1 Fensterklasse implementiert erforderliche Interfaces furEventListener und registriert sich selbst bei Ereignisquellen

2 Definition von lokalen oder anonymen Klassen in derFensterklasse, um EventListener zu implementieren

3 Trennung von GUI-Code und Ereignisbehandlung in komplettseparaten Klassen

4 Uberlagerung spezieller Methoden der Komponentenklasse,die fur Empfangen/Verteilen von Nachrichten erforderlich sind

Trennung von GUI-Code und Ereignisbehandlung ist im Sinne desMVC-Patterns fur großere Programme unbedingt zu empfehlen!

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 2

Variante 1: Entwurf zur Ereignisbehandlung

Fenster-Klasse implementiert EventListener-Interface

JFrame <<interface>>

KeyListener

MyListenerFrame

Objekt der Klasse

MyListenerFrame ist

Ereignisquelle und

Ereignisempfänger

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 3

Variante 1: Entwurf zur Ereignisbehandlung

Fenster-Klasse implementiert EventListener-Interface

⇒ einfacher Zugriff auf alle Methoden in einer Klasse

⇒ Nachteil: unubersichtlich und viele leere Methoden

c l a s s MyFrame extends JFrame implements KeyL i s t e n e r {p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { . . . }p u b l i c MyFrame ( ) {

. . . ; a ddKeyL i s t ene r ( t h i s ) ;}

p u b l i c v o i d keyPre s s ed ( KeyEvent even t ) {i f ( even t . getKeyCode ( ) == KeyEvent . VK ESCAPE) {

s e t V i s i b l e ( f a l s e ) ;d i s p o s e ( ) ;System . e x i t ( 0 ) ;

}}

p u b l i c v o i d keyRe l e a s ed ( KeyEvent even t ) { }p u b l i c v o i d keyTyped ( KeyEvent even t ) { }

}

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 4

Adapter-Klassen zur Ereignisbehandlung

Intention

Haufig sind nicht alle Ereignisbehandlungen aus einemEventListener-Interface fur die Anwendung interessant

Adapterklassen implementieren fur zugehorige Interfacesleere Methoden

Eigene Listener-Klassen konnen von Adapter-Klassen erbenund nur fur die Anwendung interessante Methoden definieren

p u b l i c a b s t r a c t c l a s s WindowAdapterimplements WindowListener , . . . {

p u b l i c v o i d windowOpened (WindowEvent e ) { } ;p u b l i c v o i d windowClos ing (WindowEvent e ) { } ;p u b l i c v o i d windowClosed (WindowEvent e ) { } ;p u b l i c v o i d windowAct ivated (WindowEvent e ) { } ;. . .

}

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 5

Variante 2: Entwurf zur Ereignisbehandlung

Fenster-Klasse enthalt Listener-Klasse

MyListenerFrame

<<interface>>

KeyListener

JFrame

MyKeyListener

KeyAdapter

Objekt der Klasse MyKeyListener Ereignisempfänger

Objekt der Klasse MyListenerFrame ist Ereignisquelle,

wird local oder anonym

in MyListenerFrame

implementiert

Die Klasse MyKeyListener

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 6

Variante 2: Entwurf zur Ereignisbehandlung

Fenster-Klasse enthalt lokale Klassen

Ü Kapselung der Event-Funktionalitat in einer lokalen Klasse,die von Adapterklasse erbt

Ü Vorteil: nur benotigte Methoden zu implementieren, aberEreignisquelle/Ereignisbearbeitung in der selben Klasse

c l a s s MyFrame extends JFrame {p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { . . . }p u b l i c MyFrame ( ) {

. . . ;a ddKeyL i s t ene r (new MyKeyLis tener ( ) ) ; }

p r i v a t e c l a s s MyKeyLis tener extends KeyAdapter {p u b l i c v o i d keyPre s s ed ( KeyEvent even t ) {

i f ( even t . getKeyCode ( ) == KeyEvent . VK ESCAPE) {s e t V i s i b l e ( f a l s e ) ; d i s p o s e ( ) ; System . e x i t ( 0 ) ;

}}}}

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 7

Variante 2: Entwurf zur Ereignisbehandlung

Fenster-Klasse enthalt anonyme Klasse

Ü Kapselung der Event-Funktionalitat in einer anonymen Klasse,die von Adapterklasse erbt

Ü Vorteil: weniger Code, aber noch weniger Kapselung, keineTrennung von GUI und Anwendungslogik

c l a s s MyFrame extends JFrame {p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) { . . . }p u b l i c MyFrame ( ) { . . . ;

a ddKeyL i s t ene r (new KeyAdapter ( ) {

p u b l i c v o i d keyPre s s ed ( KeyEvent even t ) {i f ( even t . getKeyCode ( ) == KeyEvent . VK ESCAPE) {

s e t V i s i b l e ( f a l s e ) ; d i s p o s e ( ) ; System . e x i t ( 0 ) ;}}} ) ;

}

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 8

Variante 3: Entwurf zur Ereignisbehandlung

Trennung von GUI- und Anwendungscode

MyListenerFrame

<<interface>>

KeyListener

MyKeyListener

KeyAdapterJFrame

Informiert

Klasse MyKeyListener ist nicht lokal, sondern öffentlich definiert

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 9

Variante 3: Entwurf zur Ereignisbehandlung

Trennung von GUI- und Anwendungscode

Implementierung der Ereignisbehandlung in zwei separatenKlassen ⇒ bessere Modularisierung des Codes

Verbindung durch Aufruf der Methode addKeyListener

c l a s s Tes tL i s t ene rF r ame {p u b l i c s t a t i c v o i d main ( S t r i n g [ ] a r g s ) {

KeyL i s t e n e r l i s t e n e r = new MyKeyLis tener ( ) ;JFrame window = new MyListenerFrame ( l i s t e n e r ) ; }}

c l a s s MyListenerFrame extends JFrame {p u b l i c MyListenerFrame ( KeyL i s t e n e r l i s t e n e r ) {

super ( ” L i s t e n e r−Var i an te−3” ) ;addKeyL i s t ene r ( l i s t e n e r ) ; . . . }

c l a s s MyKeyLis tener extends KeyAdapter {p u b l i c v o i d keyPre s s ed ( KeyEvent even t ) {

i f ( even t . getKeyCode ( ) == KeyEvent . VK ESCAPE) {JFrame frame = ( JFrame ) even t . ge tSou rce ( ) ;f rame . s e t V i s i b l e ( f a l s e ) ; f rame . d i s p o s e ( ) ; . . . }}}

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 10

Variante 4: Entwurf zur Ereignisbehandlung

Uberlagerung Event-Handler in den Komponenten

Ereignisquellen haben Methoden zur Nachrichtenverteilung

Weiterreichen von Nachrichten mit der Methode processEvent

Verteilung durch processEvent anhand des Nachrichtentyps anSpezialmethoden (z.B. processKeyEvent), die bei Variante 4uberschrieben werden Ü Listener-Pattern wird umgangen!

c l a s s MyListenerFrame extends JFrame {p u b l i c MyListenerFrame ( ) {

super ( ” L i s t e n e r−Var i an te−4” ) ;s e t S i z e (300 , 300 ) ; . . . }

p u b l i c v o i d proce s sKeyEvent ( KeyEvent even t ) {i f ( even t . get ID ( ) == KeyEvent . KEY PRESSED) {

i f ( even t . getKeyCode ( ) == KeyEvent . VK ESCAPE) {s e t V i s i b l e ( f a l s e ) ; . . . }}

super . p roce s sKeyEvent ( even t ) ; }

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 11

Listener-Pattern ist Spezialform desObserver-Pattern

Ü Java bietet mit dem Interface Observer und der KlasseObservable auch Moglichkeiten zur direkten Umsetzung einesObserver-Pattern

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 12

Teil II der Vorlesung PROG2

Ausnahmebehandlung(Exception Handling)

Quelle: Inhalt & Gestaltung nach Vorlesungsfolien von Peter Pepper und Odej Kao, TU Berlin

Methodische- und Praktische Grundlagen der Informatik 4 (MPGI 4), WS 2010/11 bzw. WS2011/12

Ausnahmen (Exceptions)

Arten von Laufzeitfehlern

1 logische Programmierfehler (z.B. Division durch 0)

2 fehlerhafte Bedienung eines korrekten Programms(z.B. kein Leserecht fur ausgewahlte Datei)

3 Probleme im Java-Laufzeitsystem

Varianten der Fehlerbehandlung

Maskieren: Verbergen/Abschwachen eines Fehlers(z.B. durch Wiederholen gescheiterter Aktionen)

Tolerieren: Fehleranzeige und Benutzerreaktion abwarten(z.B. Web-Site nicht erreichbar)

Wiederherstellen: Rekonstruktion konsistenter Systemzustande

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 13

Java-Prinzip zur Ausnahmebehandlung

Try-Catch-Konzept

Unterteilung des Codes in try- und catch-Blocke

(potenziell fehlerhafter) Programmcode in try-Blocken

Fehlerbehandlung in catch-Blocken

nur im Fehlerfall wird catch-Block abgefragt

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 14

Java-Schlusselworter zur Fehlerbehandlung

try

- enthalt potenziell fehlerhaften Programmcode

catch

- behandelt aufgetretene Exceptions

finally

- definiert Aufraumarbeiten nach Verlassen von try-catch-Block

throws

- deklariert unbehandelte Exceptions in der Methodensignatur

throw

- lost eine Exception aus

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 15

Abstrakte Formulierung von Try und Catch

t r y {Programmfragment mit p o t e n z i e l l e n Feh l e r n

}

catch ( Except ion−Art 1 e1 ) {Feh l e rb ehand l ung 1

}. . .catch ( Except ion−Art n en ) {

Feh l e rb ehand l ung n}

f i n a l l y {Ab s c h l u s s a k t i v i t a e t ( f a l l s n o e t i g )

}

Hinweis: Nur die erste passende catch-Anweisung wird ausgefuhrt,alle nachfolgenden (bis auf finally) werden ignoriert!

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 16

Abstrakte Formulierung von Try und Catch

t r y {Programmfragment mit p o t e n z i e l l e n Feh l e r n

}

catch ( Except ion−Art 1 e1 ) {Feh l e rb ehand l ung 1

}. . .catch ( Except ion−Art n en ) {

Feh l e rb ehand l ung n}

f i n a l l y {Ab s c h l u s s a k t i v i t a e t ( f a l l s n o e t i g )

}

Hinweis: Nur die erste passende catch-Anweisung wird ausgefuhrt,alle nachfolgenden (bis auf finally) werden ignoriert!

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 16

Abstrakte Formulierung von Try und Catch

t r y {Programmfragment mit p o t e n z i e l l e n Feh l e r n

}

catch ( Except ion−Art 1 e1 ) {Feh l e rb ehand l ung 1

}. . .catch ( Except ion−Art n en ) {

Feh l e rb ehand l ung n}

f i n a l l y {Ab s c h l u s s a k t i v i t a e t ( f a l l s n o e t i g )

}

Hinweis: Nur die erste passende catch-Anweisung wird ausgefuhrt,alle nachfolgenden (bis auf finally) werden ignoriert!

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 16

Finally-Blocks

Intention

Aufraumarbeiten nach Abschluss, um nicht mehr benotigteRessourcen freizugeben

gemeinsamen Code aus catch-Anweisungen und try-Anweisungzusammenfassen (redundanten Code vermeiden)

Wann wird ein finally-Block ausgefuhrt?

1 Exception ist nicht aufgetreten und try-Block wurdeerfolgreich ausgefuhrt

2 Exception ist aufgetreten und passende catch-Anweisungwurde ausgefuhrt

3 Exception ist aufgetreten, aber keine passendecatch-Anweisung gefunden

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 17

Deklaration von moglichen Exceptions

Verpflichtung

Deklaration moglicher Exceptions ist verpflichtend, wenn sienicht im try-catch-Block einer Methode behandelt werden

⇒ Erweiterung der Methodensignatur mit throws -Statement

r e t u r n t y p e Methodenname ( Parameter )throws Except ion1 , . . . , Except ionN

Ausgenommen sind ...

Exceptions, die uberall im Programm auftreten konnen, z.B.Division durch 0 oder nicht definierte Array-Zugriffe

verpflichtende Behandlung wurde Code unleserlich machen

⇒ betrifft alle Unchecked Exceptions in Java, d.h. die Subklassenvon RuntimeException und Error

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 18

Auswertung einfacher try-catch-Blocke

Regeln

1 erste passende catch-Anweisung wird genommen, alle anderencatch-Anweisungen ignoriert

2 keine passende catch -Anweisung ⇒ Abbruch des Programms

c l a s s Bu t t o n s L i s t e n e r implements Ac t i o n L i s t e n e r {p r i v a t e S t r i n g l a f ;p u b l i c v o i d ac t i onPe r f o rmed ( Act ionEvent e ) {

i f ( e . ge tSou rce ( ) == meta lButton ) {l a f = ” j a v a x . swing . p l a f . meta l . MetalLookAndFeel ” ; }

. . .t r y { UIManager . se tLookAndFee l ( l a f ) ; }catch ( Unsuppor tedLookAndFee lExcept ion ue ) {

System . e r r . p r i n t l n ( ue . t o S t r i n g ( ) ) ; }catch ( C la s sNotFoundExcept ion ce ) {

System . e r r . p r i n t l n ( ce . t o S t r i n g ( ) ) ; } . . .

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 19

Auswertung geschachtelter try-catch-Blocke

Aufbau

Methode mit try-catch-Block ruft weitere Methoden miteigenen try-catch-Blocken auf

Stack-basierte Implementierung, zuletzt geoffnetertry-catch-Block bildet oberstes Element auf dem Stack

Verlassen eines try-catch-Blockes ⇒ Entfernen destry-catch-Blocks vom Stack

Regeln

1 Exceptionbehandlung: Suche nach passender catch-Anweisungim gesamten Stack mit oberstem Element beginnend

2 kein passender catch -Block ⇒ Abbruch des Programms

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 20

Fehlerverfolgung in try-catch-Blocken

Problem

Fehlerverfolgung und Debugging in verschachteltentry-catch-Blocken schwierig

Hilfsmittel zur Ausgabe

Fehlerbeschreibung einer Exception

S t r i n g getMessage ( )

Informationen zur Stack-Darstellung

StackTraceE lement [ ] ge tS tackTrace ( )

Ausgabe von Exception und Trace

v o i d p r i n t S t a c kT r a c e ( )

Zeile, Methoden- oder Klassenname der Exception

getLineNumber ( ) , getMethodName ( ) , getClassName ( )

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 21

Wie benutze ich Exceptions richtig?

1 Einsatz von moglichst spezifischen Exceptions, keine sinnlosenFehlerbehandlungen, wie z.B.

catch ( Throwable e ) {System . e r r . p r i n t l n ( ” Excep t i on ” ) ; }

2 leere catch-Blocke vermeiden

3 RuntimeExceptions nicht deklarieren oder abfangen, sonderndurch geeigneten Code das Auftreten verhindern

4 bereits definierte Fehlerklassen nutzen und nur sparsam neueFehlerklassen einfuhren

5 Dokumentation unter Verwendung von @throws aus Javadoc

/∗∗∗ @throws NewException∗ E r k l a e r e n d e r Text∗∗/p u b l i c v o i d method ( . . . ) throws NewException { . . . }

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 22

RuntimeException vs. Error

RuntimeException

Programmierfehler,die vermeidbar sind(z.B. Division durch 0)

Error

Probleme, die eigentlichnicht auftreten sollten(z.B. Fehler in der JVM)

Throwable

Error Exception

IOException

OutOfMemoryError

ErrorVirtualMachine ......

NullPointer

ExceptionRuntime

ExceptionFileNotFound

Exception

......

... ... ... ... ...

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 23

Teil II der Vorlesung PROG2

Ein- und Ausgabe mit Dateien

Allgemeine Einfuhrung:

Dateien und Dateisysteme

Quelle: Inhalt & Gestaltung nach Vorlesungsfolien von Peter Pepper und Odej Kao, TU Berlin

Methodische- und Praktische Grundlagen der Informatik 4 (MPGI 4), WS 2010/11 bzw. WS2011/12

Dateien und Dateisysteme

Schlusselworter

Datei (file): Sammlung von Daten auf stabilem Speicher

Verzeichnis (directory, folder): Sammlung von Dateien, ingeeigneten Strukturen organisiert

Partition (partition): Physische oder logische Aufteilung derVerzeichnisstrukturen

Definition Dateisystem

Abstraktionsmechanismus, um Daten auf Speichermediumzuganglich zu machen

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 24

Eigenschaften von Dateisystemen

Merkmale eines Dateisystems

Persistente Datenspeicherung

Abstraktion von Details fur Datenablage

gleichzeitiger Zugriff durch mehrere Prozesse moglich

Schutzmechanismen fur Datenzugriffe

Dateiarten

1 Textdatei: zeilenweises Einlesen der Daten

2 Binardatei: Bytesequenz in Speicher laden und Ausfuhren

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 25

Organisationsformen von Dateien

Strukturierungsmoglichkeiten

Lineare Folge von Bits, Bytes: Dateistruktur bestimmtAnwendung und wird beim Einlesen interpretiert

Sequenz von Datensatzen: Einlesen/Uberschreibenzusammengesetzter Strukturen fester Große

Hierarchisch: Identifikation der Datensatze uber Schlussel

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 26

Dateiattribute (Auswahl)

1 symbolischer Bezeichner : vom Benutzer vergebener Name,Hinweis uber Dateiinhalt, assoziierte Anwendung

2 eindeutiger Bezeichner : meist numerisch, Identifikation imDateisystem

3 Dateityp : regulare Datei (alphanumerisch oder binar),Verzeichnis, ...

4 Position : Zeiger auf den Speicherplatz der Datei

5 Große : aktuelle Dateigroße in Bytes, Wortern oder Blocken

6 Rechte : Wer darf die Datei lesen, schreiben oder ausfuhren?

7 Zeit & Datum : Informationen uber Erstellung, letzten Zugriffoder letzte Modifikation

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 27

Teil II der Vorlesung PROG2

Ein- und Ausgabe mit Dateien

Dateiverarbeitung in Java

Quelle: Inhalt & Gestaltung nach Vorlesungsfolien von Peter Pepper und Odej Kao, TU Berlin

Methodische- und Praktische Grundlagen der Informatik 4 (MPGI 4), WS 2010/11 bzw. WS2011/12

Dateiverarbeitung in Java

Verarbeitungslevel

Java setzt keine Struktur voraus

Dateien werden als Folgen von Zeichen interpretiert

Verarbeitung von Zeichenfolgen (Streams)

Vorgehen

1 Offnen der Datei

⇒ Verbindungsaufbau zwischen Datei und Programm

2 Bearbeiten der geoffneten Datei

⇒ Streams werden gelesen oder geschrieben

3 Schließen der Datei

⇒ Herstellung eines definierten Zustands

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 28

Streams in Java

Varianten

1 Byte-basierte Streams

- Daten werden als Bytes gelesen/geschrieben- geeignet fur binare Dateien

2 Charakter-basierte Streams

- Daten werden als alpahnumerische Zeichen (16 BitUnicode-Zeichen) gelesen/geschrieben

- geeignet fur textuelle Dateien

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 29

Erzeugen einer Datei

Allgemeines

Objekt der Klasse File reprasentiert eine Datei

mogliche Konstruktoren

// Dateiname i n c l . PfadF i l e ( S t r i n g name)// Pfad und Dateiname g e t r e nn tF i l e ( S t r i n g path , S t r i n g name)// Pfad vom F i l e d i rF i l e ( F i l e d i r , S t r i n g name)

Erzeugen im Dateisystem

Anlegen einer Datei, falls es diese noch nicht gibt

Prufen und Anlegen bilden atomare Operation

Ruckgabewert gibt an, ob Anlegen erfolgreich war

p u b l i c boolean c r e a t eNewF i l e ( ) throws IOExcept i on

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 30

Lesen und Schreiben von Dateien

Herausforderung

Auswahl der richtigen Werkzeuge

mehr als 20 Dateizugriffsklassen verfugbar

Unterscheidung

1 Sequentieller Zugriff (stream access): Elemente alsZeichenfolge, Bearbeitung erfolgt streng nacheinander

2 Wahlfreier Zugriff (random access): Dynamische Bearbeitungan gewahlten Positionen moglich

Komfortable Funktionen in java.io.*

Lesen/Schreiben aus Datei: FileInputStream/FileOutputStream

Zeichenbasierte Ein- und Ausgabe: FileReader/FileWriter

Objektserialisierung: ObjectInputStream/ObjectOutputStream

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 31

Schreiben von Dateien mit FileWriter

Intention

Ausgabe von alphanumerischen Zeichen in Dateien

⇒ mogliche Konstruktoren

// Sch r e i b en i n Date i mit dem Beze i c hne r nameF i l eW r i t e r ( S t r i n g name)// append : neue Daten anhaengen oder u e b e r s c h r e i b e n ?F i l eW r i t e r ( S t r i n g name , boolean append )// Sch r e i b en i n Date i f i l eF i l eW r i t e r ( F i l e f i l e )

Methoden (Auswahl)

// Sch r e i b en von Datenv o i d w r i t e ( S t r i n g s t r )// Date i w i rd g e s c h l o s s e n

v o i d c l o s e ( )// Lee ren von Pu f f e r n und Sch r e i b en e r zw ingenv o i d f l u s h ( )

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 32

Beschleunigtes Schreiben mit BufferedWriter

Problem

Ausgabe auf externen Speichern (z.B. Festplatte) erzeugtAufwand fur Betriebssystem

⇒ verlangsamte Ausfuhrung von Applikationen

Losung

Datenhaltung zunachst nur in einem Puffer (Hauptspeicher)

wenn Puffer voll, erfolgt Schreibvorgang auf die Festplatte

⇒ verbesserte Effizienz durch weniger write -Aufrufe

Umsetzung

// Ausgabe w i rd an Wr i t e r uebergebenBu f f e r e dWr i t e r ( Wr i t e r out )// I n i t i a l e P u f f e r g r o e s s e w i rd f e s t g e l e g tBu f f e r e dWr i t e r ( Wr i t e r out , i n t s i z e )

Steffen Helke: PROG 2 – Einfuhrung in die Programmierung fur Wirtschaftsinformatiker, 29.4.2013 33

Recommended