Java Einführung IO (Eingabe/Ausgabe)

Ähnliche Dokumente
Java Fehlerbehandlung

java.io Ziel Ressourcen Page 1 Verstehen der unterschiedlichen I / O Möglichkeiten Anwenden der Java I/ O Klassen Java Tutorial Java API Dokumentation

Eingabe und Ausgabe in Java. Dr. Horst Treiblmaier Abteilung für Wirtschaftsinformatik WU Wien

Vorlesung Programmieren

Java Einführung Exception Handling. Kapitel 17

Kapitel 12. Programmierkurs. Allgemeine Konzepte Byte-Streams versus Character-Streams

Java I/O. Input / Output stream Library Regelt I/O über verschiedene Kanäle. Führt notwendige Umwandlungen/Konvertierungen aus

Vorlesung Programmieren. Java I/O: Input und Output mit Java. Ein-/Ausgabe von Daten. Java I/O. Heute. Grundlage fast aller Programme

Programmieren in Java

Java I/O. Input / Output stream Library Regelt I/O über verschiedene Kanäle. Führt notwendige Umwandlungen/Konvertierungen aus

Datenströme in Java. Zeichenkonvertierung

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

Ausnahmebehandlung. Ausnahmen werfen (auslösen) Eigene Ausnahmen definieren. Ausnahmen abfangen. Ausnahmen definieren

JAVA für Einsteiger. Streams und Dateien. eden market Autor: Norman Lahme

1 Fehler-Objekte: Werfen, Fangen, Behandeln

Programmieren 2 Selbststudium Semesterwoche 6

Grundlagen der Programmierung! Kapitel 10: Ein- und Ausgabe! Ziele dieses Kapitels! Datei! Das Problem!

Java Input/Output System (IO)

Ausdrucksbäume in verschiedenen Darstellungen

Dr. Monika Meiler. Inhalt

Java I Vorlesung Exceptions

Info B VL 7: Input/Output

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete! 4. Ausnahmen (Exceptions) II.4.

Programmieren I. Dateien: Allgemeines. Vorlesung 10. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Wintersemester 2010/2011

Streams. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Dateien. DVG Dateien 1

Streams. V by WBR1&MOU2/BFH-TI. Berner Fachhochschule Hochschule für Technik und Informatik HTI

Kapitel 15: Ausnahmen und

Client-Server TCP/IP - Kodierung

Dateien: Allgemeines Dateien lesen Beispiel: CSV-Daten Filter Ausgabe in Dateien. Programmieren I. Dr. Klaus Höppner

Ein- und Ausgabe in Java

Versuchsziele Konzepte der parallelen Programmierung am Beispiel von Threads anwenden können. Einbau von Kontrollmechanismen mittels Semaphore.

Software Entwicklung 1

Objektorientierung II & die Java Klassenbibliothek. Kristian Bergmann und Arthur Lochstampfer

Einführung in die Informatik Algorithmen und Datenstrukturen. Thema 12 Datenverarbeitung

Umleitung von Datenströmen

Grundlagen der Programmierung Prof. H. Mössenböck. 16. Ausnahmen (Exception Handling)

Dateien: Allgemeines Dateien lesen Beispiel: CSV-Daten Filter Ausgabe in Dateien. Programmieren I. Martin Schultheiß

Programmieren in Java

Grundlagen der Objektorientierten Programmierung - IO-Tools

Liste Programmieren Java Überblick

Socket-Programmierung unter Java

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Abschnitt 7: Weitere Konzepte der oo Programmierung in Java

7. Java Fehler und Ausnahmen

Programmieren I. Kapitel 15. Ein und Ausgabe

Verteilte Systeme - Java Networking (Sockets) 2 -

1 Verkettete Liste (20 Punkte)

Einführung zur Aufgabengruppe 2

System.out.println("TEXT");

Fragenkatalog ESOP WS 16/17

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 13/14. Kapitel 11. Fehler und Ausnahmen

Info B VL 6: Exceptions

Programmieren 2 09 File-IO

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 12/13. Kapitel 11. Fehler und Ausnahmen

Referat: Netzwerkprogrammierung in Java

15 Fehlerobjekte: Werfen, Fangen, Behandeln

Vorlesung 10. Sitzung Grundlegende Programmiertechniken

E Testen mit JUnit. E Testen mit JUnit. E.1 TestCase. Test-First-Ansatz. Sammelt alle Unit-Tests zu einer Klasse. Erbt von junit.framework.testcase.

15 Fehlerobjekte: Werfen, Fangen, Behandeln. Idee. Fehlerklassen. Fehlerklassen

Grundlegende Java Bibliotheken

boolean ispalindrome = word.equalsignorecase(reverse.tostring());

Überblick. Peer Kröger (LMU München) Einführung in die Programmierung WS 16/ / 854

Modellierung und Programmierung 1

Programmieren I und II

Ein- und Ausgabe. Für die Ein- und Ausgabe von Daten gibt es eine Reihe von Möglichkeiten. Beispiele hierfür sind:

Grundlagen der Fehlerbehandlung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 06: Ausnahme- und Fehlerbehandlung in Java.

Javakurs zu Informatik I. Henning Heitkötter

Soll die Programm-Ausführung nicht beendet werden, muss der Fehler abgefangen werden. NumberFormatException

Name: Matrikelnr : Aufgabe 1: (ca. 8 Punkte )

Algorithmen und Datenstrukturen II

15 Fehlerobjekte: Werfen, Fangen, Behandeln

Client-Server TCP/IP - Kodierung

Grundlagen der Programmierung

Exceptions - Klausuraufgaben

Gliederung Grundlagen Schlüsselworte try-catch Fehlerobjekte Fehlerklassen Schlüsselwort finally Schlüsselwort throws selbst erstellte Exceptions

Grundlagen der Programmierung. Kapitel 10: Ein- und Ausgabe. Ziele dieses Kapitels. Das Problem. Datei

Grundlagen der Programmierung. Kapitel 11: Ein- und Ausgabe. Ziele dieses Kapitels. Das Problem. Datei

Grundlagen der Programmierung. Kapitel 11: Ein- und Ausgabe. Ziele dieses Kapitels. Das Problem. Datei

II.1.1. Erste Schritte - 1 -

Ein String ist in Java eigentlich eine Klasse, wir können ihn aber zunächst als Datentyp betrachten, der zur Speicherung von Zeichenketten dient.

II.4.4 Exceptions - 1 -

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Dynamische Datenstrukturen Jiri Spale, Algorithmen und Datenstrukturen - Dynamische Datenstrukturen 1

Grundlagen der Programmierung! Kapitel 10: Ein- und Ausgabe! Ziele dieses Kapitels! Das Problem! Datei!

Algorithmen und Programmierung III

15 Fehlerobjekte: Werfen, Fangen, Behandeln

Java : Fehlerbehandlung.

5.13 Umgang mit Fehlern

Kapitel 9. Ein- und Ausgabe. 9.1 Ströme

Problemstellung. Object1:Klasse1. Object2:Klasse2 att1: Klasse1 att2: 9. att1: att2: 17. Klasse1 att1 att2 Klasse2 att1 att2

2 Eine einfache Programmiersprache

Programmieren I und II

Javakurs für Fortgeschrittene

2 Eine einfache Programmiersprache

TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK

Betriebssysteme. Wintersemester Kapitel 4 Ein- / Ausgabe und Dateisysteme. Patrick Kendzo

Ausnahmenbehandlung in Java. Dr. Horst Treiblmaier Abteilung für Wirtschaftsinformatik WU Wien

15 Ein-/Ausgabe Kommunikation. Dateien. Schreiben und Lesen von Dateien. Sockets. Übungsaufgaben

Transkript:

Java Einführung IO (Eingabe/Ausgabe)

Inhalt dieser Einheit Ein-/Ausgabe: Arbeiten mit Verzeichnissen und Dateien Schreiben und Lesen von Dateien bzw. Datenströmen Fehlerbehandlung beim Schreiben und Lesen von Dateien bzw. Datenströmen 2

Lesen und Schreiben von Daten Ein Programm muss oft Informationen aus einer externen Quelle importieren (Datenquelle) oder Information in eine externe Quelle exportieren (Datensenke). Die Information kann sich in einer Datei auf einer Diskette, irgendwo im Netzwerk, im Speicher, in einem anderen Programm befinden oder über die Tastatur eingegeben werden. Die Information kann verschiedenen Typs sein, zum Beispiel Objekte, Zeichen, Bilder oder Sounds. (Quelle: http://java.sun.com) In dieser Einheit werden Klassen vorgestellt, die ein Java Programm benötigt, um Informationen zu lesen und zu schreiben. 3

Files & Unterverzeichnisse Für die Verwendung der Ein-Ausgabe-Klassen muss das Package java.io importiert werden. Dateien und Unterverzeichnisse sind vom Datentyps File aus dem Package java.io: Datei: File f = new File ( filename ); Unterverzeichnis: File dir = new File ( dirname ); 4

Methoden von File Methoden für Dateien oder Unterverzeichnisse String getname() - liefert Datei- bzw. Verzeichnis-Namen getabsolutepath() - liefert Datei-/Verzeichnis-Namen mit Pfad String getparent()- liefert das Oberverzeichnis boolean exists() - Existiert die Datei? boolean canwrite()- Darf in die Datei geschrieben werden? boolean canread() - Darf die Datei ausgelesen werden? boolean isfile() - Ist es eine Datei,... boolean isdirectory()... oder ein Verzeichnis? boolean mkdir() - legt ein Verzeichnis an String[] list() - für eine Liste von allen in einem Verzeichnis enthaltenen Datei- und Verzeichnis-Namen. boolean delete() - für das Löschen des Files (Für weitere Methoden von File, lesen Sie bitte in der Java API nach) 5

Bsp.: Klasse InfoTxt (Handling von Dateien) import java.io.*; public class InfoTxt { public static void main (String[] args){ File info = new File("info.txt"); //Erzeugt File-Objekt mit Namen "info.txt" System.out.println(info.getName()); System.out.println(info.length()); (vereinfachtes Beispiel ohne Exception-Handling) 6

Bsp.: Klasse File (Handling von Dateien) import java.io.*; public class FileTest{ public static void main (String[] args){ File file = new File("file.txt"); //Erzeugt File-Objekt mit Dateiname file.txt if (file.exists() &&!file.isdirectory()){ System.out.println("Datei"+file.getName()+ "gefunden"); System.out.println("Voller Name: " + file.getabsolutepath()); else if (!file.exists()) { System.out.println("Datei "+file.getname()+" existiert nicht!"); 7

Bsp.: Klasse File (Handling von Verzeichnissen) import java.io.*; public class DirTest{ public static void main (String args[]){ File dir=new File(".");//aktuelles Verzeichnis String[] list=dir.list(); for (int i=0; i<list.length; i++) if (list[i].endswith(".txt")){ long length=new File(dir,list[i]).length(); // Länge der Files System.out.println(list[i]+" ["+length+"]"); 8

Datenströme (Streams) IO-Operationen werden in Java durch Datenströme realisiert: Ein Datenstrom (engl.: Stream) ist eine Datenstruktur, welche Daten in serieller Form speichern kann. Mit einem Stream kann entweder gelesen oder geschrieben werden. 9

Reading und Writing Wenn ein Programm Daten lesen soll, dann wird ein Stream auf die Datenquelle geöffnet und die Information seriell gelesen. Ebenso kann ein Programm, das Daten schreiben soll, einen Stream zu der Datensenke öffnen und die Information dorthin seriell hinausschreiben. 10

Ablauf Lesen 1. Öffnen eines Streams; 2. Solange noch Info 3. Lese Info; 4. Schließe den Stream; Schreiben 1. Öffnen des Streams; 2. Solange noch Info 3. Schreibe Info; 4. Schließe den Stream; Selber Ablauf - egal woher die Daten kommen und wohin sie gehen! 11

Arten von Datenströmen Es gibt in Java zwei verschiedene Gruppen von Datenströmen: Byte-Streams (InputStream, OutputStream) werden für das Arbeiten mit byte-orientierten Datenströmen eingesetzt. Die Transporteinheiten bei Byte-Streams sind 8 Bit lang. Character-Streams (Reader und Writer) werden für das Arbeiten mit zeichen- und zeilenorientierten Datenströmen eingesetzt. Diese Klassen verwenden 16 Bit lange Unicode- Zeichen. 12

Reader vs. InputStream Writer vs. OutputStream Reader vs. InputStream Writer vs. OutputStream Reader Lesen von Character-Streams (16 bit): Zeichen und Arrays von Zeichen Textdateien InputStream Lesen von Byte-Streams (8 Bit) Binäre Daten wie Soundfiles, Bilder Writer Schreibt Character-Streams OutputStream Schreibt Byte-Streams 13

Klasse InputStream InputStream ist die abstrakte Oberklasse für das Lesen von Datenströmen, also für die Byte-orientierte Eingabe (z.b. Bild- und Sounddateien). FileInputStream ist eine Subklasse von InputStream für das Lesen von Dateien. Das Öffnen des Lese-Stroms bzw. des Files erfolgt mit einem Konstruktor der Form FileInputStream infile = new FileInputStream (fileobject); (Weitere Subklassen sind z.b. ObjectInputStream oder ByteArrayInputStream) 14

Klasse InputStream II Wichtige Methoden der Klasse InputStream: int read() liefert ein Byte, oder den Wert -1, wenn das Ende des Datenstroms (End-of-File) erreicht wurde. void close() Beendet eine Stream- Verbindung und gibt alle Systemressourcen frei. 15

InputStream Klassenhierarchie Die Klasse InputStream und ihre Subklassen: 16

Klasse OutputStream OutputStream ist die abstrakte Oberklasse für das Schreiben von Datenströmen, also für die Byte-orientierte Ausgabe. FileOutputStream ist eine Subklasse von OutputStream für das Schreiben von Dateien. Das Öffnen des Schreib-Stroms bzw. des Files erfolgt mit einem Konstruktor der Form FileOutputStream outfile = new FileOutputStream(fileObject); (Weitere Subklassen sind z.b. ByteArrayOutputStream, oder ObjectOutputStream) 17

Klasse OutputStream II Wichtige Methoden der Klasse OutputStream: int write() liefert ein Byte, oder den Wert -1, wenn das Ende des Datenstroms (End-of-File) erreicht wurde. abstract void close() Beendet die Stream-Verbindung und gibt alle Systemressourcen frei. 18

OutputStream Klassenhierarchie Die Klasse OutputStream und ihre Subklassen: 19

Kopieren von Dateien Beispiel import java.io.*; public class FileStream { public static void main(string[] args){ File inputfile = new File( music.mp3"); File outputfile = new File( song.mp3"); FileInputStream in = new FileInputStream(inputFile); FileOutputStream out = new FileOutputStream(outputFile); int c; while ((c = in.read())!= -1){ out.write(c); in.close(); out.close(); (vereinfachtes Beispiel ohne Exception-Handling. Vollst. Code: siehe Copy.java 20

Klasse Reader Reader ist die abstrakte Oberklasse für das Lesen von Textströmen, also für die Zeichen-orientierte Eingabe. InputStreamReader ist eine Subklasse von Reader für das Lesen von Dateien. Das Öffnen des Lese-Stroms bzw. des Files erfolgt mit einem Konstruktor der Form InputStreamReader infile = new FileReader(fileObject); (Weitere Subklassen sind z.b. StringReader oder CharArrayReader) 21

Klasse Reader II Wichtige Methoden der Klasse Reader: int read() liefert ein Zeichen, oder den Wert -1, wenn das Ende des Datenstroms (End-of-File) erreicht wurde. abstract void close() Beendet eine Stream-Verbindung und gibt alle Systemressourcen frei. 22

Reader Klassenhierarchie Die Klasse Reader und ihre Subklassen: 23

Klasse Writer Writer ist die abstrakte Oberklasse für das Schreiben von Textströmen, also für die Zeichen-orientierte Ausgabe. OutputStreamWriter ist eine Subklasse von Writer für das Schreiben von Dateien. Das Öffnen des Schreib-Stroms bzw. des Files erfolgt mit einem Konstruktor der Form OutputStreamWriter outfile = new OutputStreamWriter(fileObject); (Weitere Subklassen sind z.b. PrintWriter oder StringWriter) 24

Klasse Writer II Wichtige Methoden der Klasse Writer: int write() liefert ein Zeichen, oder den Wert -1, wenn das Ende des Datenstroms (End-of-File) erreicht wurde. abstract void close() Beendet eine Stream-Verbindung und gibt alle Systemressourcen frei. 25

Writer Klassenhierarchie Die Klasse Writer und ihre Subklassen: 26

Kopieren von Dateien Beispiel import java.io.*; public class Copy { public static void main(string[] args){ File inputfile = new File( input.txt"); File outputfile = new File("outagain.txt"); FileReader in = new FileReader(inputFile); FileWriter out = new FileWriter(outputFile); int c; while ((c = in.read())!= -1){ out.write(c); in.close(); out.close(); (vereinfachtes Beispiel ohne Exception-Handling. Vollst. Code: siehe Copy.java 27

Buffer zum Verbessern der Effizienz arbeitet man mit einem Buffer zum Lesen: BufferedReader: Character bzw. BufferedInputStream: Byte zum Schreiben: BufferedWriter: Character bzw. BufferedOutputStream: Byte 28

Buffer 2 Ohne Buffer bewirkt jeder Aufruf von read(), dass ein einzelnes Byte aus dem File gelesen und in den Datentyp Character übersetzt und dann so zurückgeliefert wird. Um die Eingabe effizienter und schneller zu machen, soll nicht jedes Byte einzeln gelesen werden, sondern aus einem Pufferbereich. Die Buffered-Klassen bieten zusätzliche Methoden.(z.B. die Klasse BufferedReader - readline()) 29

BufferedReader und BufferedWriter Konstruktoren new BufferedReader (Reader) new BufferedWriter (Writer) Beispiele File filei = new FileReader( FileIn.txt ); BufferedReader in = new BufferedReader(fileI); File fileo = new FileWriter( FileOut.txt ); BufferedWriter out = new BufferedWriter(fileO); Kurzform BufferedReader in = new BufferedReader ( new FileReader ("ReadFile.java")); 30

Lesen von Dateien Beispiel import java.io.*; public class ReadFile { public static void main (String[] args) { String thisline; File filei = new FileReader( FileIn.txt ); BufferedReader in = new BufferedReader(fileI); while( (thisline = in.readline())!= null) { System.out.println(thisLine); in.close(); (vereinfachtes Beispiel ohne Exception-Handling. 31

Exceptions Alle Ein-/ und Ausgabe- Operationen können Fehlersituationen auslösen: Alle I/O-Operationen müssen durch Ausnahmeregelungen (Exceptions) bei evtl. Fehlersituationen abgefangen werden. Throwable Error Exception IOException RuntimeException 32

Exceptions Eine Exception ist ein Ereignis, das während der Programmausführung auftritt und den normalen Ablauf des Programms stört bzw. abbricht. Java bietet Fehlerbehandlungsroutinen (Exception Handling), um während des Programmablaufes auftretende Exceptions abzufangen. Diese auftretenden Probleme werden durch Objekte spezieller Exception-Classes repräsentiert, welche eine genaue Fehlerbeschreibung und den derzeitigen Zustand des Programmes speichern und ausgeben können. 33

Vorgänge beim Lesen eines Files Pseudocode: readfile { open the file; determine its size; allocate that much memory; read the file into memory; close the file; 34

Mögliche Exceptions Was passiert wenn... die Datei nicht geöffnet werden kann? die Länge der Datei nicht bestimmt werden kann? nicht genügend Speicher zugeteilt werden kann? wenn das Lesen fehlschlägt? wenn das File nicht geschlossen werden kann? 35

Exception Try/Catch Block Syntax Der Try-Block umschließt die IO-Operationen. Für jeden auftretenden Fehler kann eine Fehlerbehandlungsroutine aus einer oder mehreren Anweisungen definiert werden (Catch-Block). Die geworfenen (thrown) Exceptions werden über eine typisierte Catch - Anweisung abgefangen, sofern die Ausnahme mit ihrem Typ übereinstimmt. import java.io.* class ReadFile{ try { open the file; determine its size; allocate that much memory; read the file into memory; close the file; catch (FileNotFoundException e){dosomething; catch (NotOwnerException e) { dosomething; catch (IllegalAccessException e) {dosomething;... 36

Exception - Syntax Alle Methoden in Java, die im Laufe ihrer Ausführung eine Exception auslösen könnten, können diese generell ankündigen. Dies geschieht bei der unmittelbaren Definition der Methode, und zwar durch das throws - Schlüsselwort im Kopf der Definition. Alternativ kann in der Methode try/catch verwendet werden. Die beiden Konzepte können auch kombiniert werden. Die Methode gibt nur standardmäßige Fehlermeldungen aus: type methodename() throws Exception { // Anweisungen 37

Lesen von Dateien Klasse ReadFile hier mit Exception-Handling import java.io.*; public class ReadFile { public static void main (String[] args) { String thisline; try { BufferedReader in = new BufferedReader ( new FileReader ("ReadFile.java")); while( (thisline = in.readline())!= null) { System.out.println(thisLine); in.close(); catch (Exception e) { System.out.println("error " + e); 38

Schreiben von Dateien Beispiel import java.io.*; public class WriteFile { public static void main (String[] args) { try { BufferedWriter out = new BufferedWriter( new FileWriter ("file.txt")); // FileWriter fw = new FileWriter("file.txt"); // BufferedWriter out = new BufferedWriter(fw); out.write("der Text für die Datei"); out.newline(); out.close(); catch (Exception e) {System.out.println(e); 39

Kopieren von Dateien Klasse Copy hier mit Exception-Handling import java.io.*; public class Copy { public static void main(string[] args) throws Exception { File inputfile = new File( input.txt"); File outputfile = new File("outagain.txt"); FileReader in = new FileReader(inputFile); FileWriter out = new FileWriter(outputFile); int c; while ((c = in.read())!= -1) { out.write(c); in.close(); out.close(); siehe Copy.java 40

Exception Beispiel Wenn die Datei input.txt nicht im aktuellen Verzeichnis enthalten ist, wird beim Aufruf von der Klasse Copy die FileNotFoundException ausgegeben. Diese Exception wird in der Klasse FileNotFoundException definiert und ist eine Subklasse von IOException. Exception in thread "main" java.io.filenotfoundexception: input.txt (Das System kann die angegebene Datei nicht finden) at java.io.fileinputstream.open(native Method) at java.io.fileinputstream.<init>(unknown Source) at java.io.fileinputstream.<init>(unknown Source) at java.io.filereader.<init>(unknown Source) at Copy.main(Copy.java:7) 41

Beispiel: Abfangen spezieller Exceptions (FileNotFoundException) import java.io.*; public class Copy { public static void main(string[] args) { try { File inputfile = new File("input.txt"); FileReader in = new FileReader(inputFile); int c; while ((c = in.read())!= -1) System.out.print(c); in.close(); catch (FileNotFoundException fnf) { System.err.println("Sondermeldung: Input.txt not found! "+fnf); catch (Exception e) {System.err.println(e); Erzeugt folgende Fehlermeldung, wenn es die Datei input.txt nicht gibt: Sondermeldung: Input.txt not found! java.io.filenotfoundexception: input.txt (Das System kann die angegebene Datei nicht finden) 42

Tastatureingabe Klasse Echo mit Exception-Handling import java.io.*; public class Echo { public static void main(string[] args) throws IOException { BufferedReader into = new BufferedReader( new InputStreamReader(System.in)); String s; while((s = into.readline()).length()!= 0) //solange nicht Leerzeile System.out.println(s); //eine Leerzeile beendet das Programm 43

Lernkontrolle Sie kennen die Syntax, für die Eingabe und Ausgabe von Daten eines Java-Programms. Sie kennen die Unterschiede und die Anwendung der Klassen Reader, Writer, InputStream, OutputStream Bei der Ein- und Ausgabe von Daten können Fehler auftreten. Sie wissen, wie Sie diese Fehler abfangen können. 44