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

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

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

Programmieren in Java

Vorlesung Programmieren

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

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

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

Java Einführung IO (Eingabe/Ausgabe)

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

Java Fehlerbehandlung

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

Dateien. DVG Dateien 1

Programmieren 2 Selbststudium Semesterwoche 6

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

Datenströme in Java. Zeichenkonvertierung

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

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

Socket-Programmierung unter Java

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

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

Dr. Monika Meiler. Inhalt

Info B VL 7: Input/Output

Umleitung von Datenströmen

Java Einführung Exception Handling. Kapitel 17

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

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

Kapitel 15: Ausnahmen und

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

Programmieren in Java

Programmieren I. Kapitel 15. Ein und Ausgabe

Distributed Computing Group

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

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

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

Einführung in die Informatik Files and Streams

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

Java I Vorlesung Exceptions

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

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

Beispiel: Temperaturumwandlung. Imperative Programmierung. Schwerpunkte. 3. Grundlegende Sprachkonstruktionen imperativer Programme

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

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

Ein- und Ausgabe in Java

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

Algorithmen und Datenstrukturen II

1 Klassen anlegen und Objekte erzeugen

1 Klassen anlegen und Objekte erzeugen

Programmieren 2 09 File-IO

3. Grundlegende Sprachkonstruktionen imperativer Programme

Einführung in die Informatik

Software Entwicklung 1

Ausdrucksbäume in verschiedenen Darstellungen

Einführung zur Aufgabengruppe 2

Primitive Datentypen

Programmieren I und II

Grundlagen der Programmierung

Klassen. Erzeugen von Objekten. Einführung in die Informatik. Sichern neu erzeugter Objekte. Die Operation new

Java Input/Output System (IO)

Lesen und Schreiben von Dateien

Einstieg in die Informatik mit Java

Dateien/Streams. Arthur Zaczek. Okt 2015

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

Java - Programmierung - Prozedurale Programmierung 1

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

Informatik B von Adrian Neumann

Welcome to java. einfach objektorientiert verteilt interpretierend robust secure architekturneutral portabel schnell parallel(multitheded)

2 Die Codierung Sehen wir uns mal den vereinfachten Weg der Informationen von der Tastatur aus bis zum Filesystem an:

System.out.println("TEXT");

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

Klassen und Objekte. Objekte einer Klasse bilden

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Programmieren in Java

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

Java I/O, Serialisierung und Netzwerkprogrammierung

II.1.1. Erste Schritte - 1 -

Modellierung und Programmierung 1

Einführung in die Programmierung I. 2.0 Einfache Java Programme. Thomas R. Gross. Department Informatik ETH Zürich

Fragenkatalog ESOP WS 16/17

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Java-Schulung Grundlagen

7. Java Fehler und Ausnahmen

Kommunikationsnetze. 2. Direkte TCP/IP-Verbindungen 2.1 Höhere Programmiersprachen

Ein- und Ausgabe mit Dateien

Android Programmierung. Studiengang MI

Programmiermethodik 1. Klausur

Zeichen. Datentyp char. char ch = 'x'; Page 1. Zeichen braucht man zur Verarbeitung von Texten, Namen, Bezeichnungen. Zeichencodes

Javakurs zu Informatik I. Henning Heitkötter

Selbststudium OOP6 & ALG Programmieren 1 - H1103 Felix Rohrer

Musterlösung zum 8. Aufgabenblatt vom Dienstag, den 02. Juni 2009 zur Vorlesung. Informatik B. von Jacob Krause

Informatik 1 - Translation Studies in Information Technology. Musterlösung zum Aufgabenblatt der ersten Pflichtübung im Wintersemester 16/17

Autoboxing - Nachtrag

Programmieren in Java

Klausur Fachprüfung Wirtschaftsinformatik. Name:

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

Programmieren 2 09 File-IO

Programmiermethodik 1. Klausur Lösung

2 Eine einfache Programmiersprache


Transkript:

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

Java API Prinzip Java IO-API ist für eine allgemeine Flexibilität entwickelt --> nicht immer einfach!! flexibel Nachricht unterschiedliche Ein-/ Ausgabequellen - Files, Konsole, Netzwerkverbindungen, etc... unterschiedliche Kodierung - binär, Zeichen (Unicode),... unterschiedlicher Zugriff Stream windows Mac/os file network screen unix file network screen - wortweise, zeilenweise, sequenziell, 'random-access', gepuffert,... file networ screen streams als allgm. Konzept Ein stream ist ein Objekt zum Transfer von Daten (Information). Input stream: Transfer der Daten von der Quelle in das Programm. Quelle Datenstrom read Programm Output stream: Transfer der Daten vom Programm zur Ziel. Programm write Datenstrom Ziel Page 2

Exceptions I/ O erzeugt viele Ausnahmen (java.io.ioexception): device error, file doesn't exist, file is protected, end of file. IOExceptions: sind nicht Teil der RuntimeExceptions und müssen deshalb immer behandelt werden. --> Compilerbeschwerde! Manche Fehler sind schwer zu testen (device error). OutputStreams Ein OutputStream ist ein Objekt welches weiss, wie Bytes an einen Ziel-OutputStream zu senden sind. FileOutputStream: Ein FileOutputStream ist ein Objekt welches weiss, wie Bytes in ein File geschrieben werden. Methode in OutputStream : void write( int b) throws IOException Erzeugen eines FileOutputStream Objekts. new FileOutputStream( String name) new FileOutputStream( String name, boolean append) Beide können throw FileNotFoundException erzeugen Page 3

Ein einfaches Beispiel (byte-stream) Schreiben einer kurzen Nachricht in ein File! OutputStream outstream = null; // keep compiler happy try { outstream = new FileOutputStream(" OutputTest. txt"); catch (IOException e) { System. out. println(" Error in opening output file"); System. exit( 1); // end try/ catch // write to the output stream try { // write individual bytes outstream. write( 'h'); outstream. write( 'e'); outstream. write( 'l'); outstream. write( 'l'); outstream. write( 'o'); catch (IOException e) { System. out. println(" Error in writing to output file"); System. exit( 1); // end try/ catch! IO_1.java Output Buffering Beim Ausführen des Programms (letzte Folie) ist nicht sicher, dass das File alle Daten enthält typischer Fehler!! Grund: output buffering Programm Daten Buffer in Memory Daten File on disk Beim Schreiben eines Files muss das File mit close geschlossen werden. Dies leert den Puffer und gibt die Systemressourcen wieder frei. OutputStream Methode: void close() throws IOException Page 4

Einfaches Beispiel verbessert try { outstream. close(); catch (IOException e) { System. out. println(" error in closing output file"); // end try/ catch Das File OutputTest.txt existiert nun und enthält immer die Zeile: 'hello' Wie kann ich nun Text in eine Datei schreiben? Text Dateien Ein FileOutputStream schreibt einzelne Bytes. Sehr flexibel: Mit Bytes kann man alles darstellen. Nicht sehr angenehm um Text zu handhaben! Textdateien: enthalten ASCII (oder Unicode) Zeichen. Konzeptuell in Zeilen separiert. " newline characters ( '\ n' )" Beispiele:.txt,.java,.html. Betriebssysteme haben spezifische Konventionen bzgl. Textdateien Binärdateien: enthalten Daten binär kodiert. Beispiele:.class,.exe,.pdf,.doc (werden später erläutert). Page 5

Character & Byte Streams Die stream-oberklasse erzeugt zwei vom Aufbau sehr ähnliche Klassenhierarchien! Character Streams und Byte Streams Byte Streams Character Streams Page 6

Writer Ein "Writer" schreibt Zeichen (char) in ein Textfile. public class PrintWriter extends Writer Klasse PrintWriter : schreibt formatierten Text in einen stream. Die Methoden sind ähnlich zu: print println Überladen um jegliche Datentypen zu schreiben. ebenso eine close Methode. Keine der Methoden wirft Ausnahmen. Erzeugen eines PrintWriter Objekts Ein PrintWriter-Objekt nutzt ein OutputStream-Objekt. Die Ausgabe wird formatiert - welche Zeichen (char) müssen geschrieben werden - und sendet die Zeichen dann an den OutputStream. Wert: 1.2 PrintWriter Bytesequenz: '1', '.','2' OutputStream Page 7

Erzeugen eines PrintWriter Objekts Um einen PrintWriter zu erzeugen, muss zuerst ein OutputStream erzeugt werden. OutputStream outstream = null; // keep compiler happy // create the output stream try { outstream = new FileOutputStream( filename); catch (IOException e) { System. out. println(" Error in opening output file"); System. exit( 1); // end try/ catch // create PrintWriter to write // formatted output PrintWriter writer = new PrintWriter( outstream); Erzeugen eines PrintWriter Objekts (3) Kürzere Version. PrintWriter writer = null; try { writer = new PrintWriter( new FileOutputStream(" outputfile. txt")); catch (IOException e) { System. out. println(" Error in opening output file"); System. exit( 1); Page 8

Nutzung eines PrintWriter Objekts // write a string writer. println(" hello, world!"); // write some other types writer. print(" the year is "); writer. print( 2012); writer. print(", the current temperature is "); writer. println( 10.4); writer. print(" and my boolean variable is "); boolean b = true; writer. println( b); writer. close() IO_2.java In der Datei steht: hello, world! the year is 2012, the current temperature is 10.4 and my boolean variable is true Standard Output Schreiben in den "standard output" (Bildschirm): System.out.print System.out.println System ist eine Klasse im API. System.out ist static in System. Der Datentyp von System.out ist PrintStream. PrintStream ist ähnlich zu PrintWriter. Page 9

Text Input Lesen von einer Textdatei. Reader InputStreamReader BufferedReader FileReader Ein FileReader liest ein Zeichen von einer Textdatei. Konstruktor: FileReader( String name ) throws FileNotFoundException Anwenden von FileReader Ein "Reader" hat die Methode : int read () throws IOException Liest einzelnes Zeichen. ' returns -1 ' am Ende der Datei. Wird gewöhnlich selten direkt verwendet!! Page 10

BufferedReader Ein "BufferedReader" kann ganze Zeilen auf einmal lesen, - angenehmer. Erzeugen eines BufferedReader aus einem einfacheren Reader: new BufferedReader( new Reader("name")); hat die Methode String readline() throws IOException. Der von readline zurückgegebene ' String ' enthält nicht das end-of-line Zeichen. Am Ende der Datei wird null zurückgegeben ( null!= "" ). Beispiel zu BufferedReader String filename = "sample. txt"; try { BufferedReader reader = new BufferedReader( new FileReader( filename )); String inputline; // a line of input from the file while (true) { // exit with break inputline = reader. readline(); if (inputline == null) break; System. out. println( inputline); // end while reader. close(); catch (FileNotFoundException e) { System. out. println(" Error: " + filename + " not found"); catch (IOException e) { System. out. println(" I/ O error while reading"); IO_3.java Page 11

Andere Datentypen lesen? "BufferedReader" kann char oder string lesen. Was ist mit int, double, boolean, etc... Es gibt keine direkten Methoden: ein string ist in die anderen Typen zu konvertieren. string nach int int i = Integer.parseInt(s) string nach double double d = Double.parseDouble(s) Es ist jedoch notwendig zu wissen was man aus der Datei erwartet. ----> NumberFormatException Beispiel Angenommen wir erwarten in der Eingabedatei. int, double, boolean (jeweils ein separate Zeile) Die jeweilige Methode zum parsen wird eine NumberFormatException auswerfen falls int und/oder double nicht entsprechend formatiert sind. Page 12

Beispiel IO_4.java (2) try { BufferedReader reader = new BufferedReader(...); // read the int String inputline = reader. readline(); if (inputline == null) throw new NumberFormatException(); int theint = Integer. parseint( inputline); System. out. println(" the integer is: " + theint); Beispiel (3) // read the double inputline = reader. readline(); if (inputline == null) throw new NumberFormatException(); double thedouble = Double. parsedouble( inputline); System. out. println(" the double is: " + thedouble); Page 13

Beispiel (4) // read the boolean inputline = reader. readline(); if (inputline == null) throw new NumberFormatException(); boolean theboolean; if (inputline. equalsignorecase("true")) theboolean = true; else if (inputline. equalsignorecase("false")) theboolean = false; else throw new NumberFormatException(); System. out. println(" the boolean is: " + theboolean); reader. close(); Beispiel abschliessen // read the boolean catch (NumberFormatException e) { System. out. println(" illegal file format"); catch (FileNotFoundException e) { System. out. println(" Error: file " + filename + " not found"); catch (IOException e) { System. out. println(" I/ O error while "+ "reading from file"); IO_4.java Page 14

java.io.file Plattformunabhänige Definition von Datei und Verzeichnis Namen. Hat Methoden um Files und Directories abzufragen. Constants to represent platform separators: directory UNIX mit / und DOS \ path UNIX mit : und DOS mit ; Erzeugen neuer File-Objekte : File myfile myfile = new File( test.dat ); myfile = new File( /, test.dat ); File mydir = new File( / ); myfile = new File(myDir, test.dat ); java.io.file String getname(); String getpath(); String getabsolutepath(); String getparent(); boolean renameto(file); long lastmodified(); long length(); boolean delete(); boolean exists(); boolean canwrite(); boolean canread(); boolean isfile(); boolean isdirectory(); boolean mkdir(); String[] list(); Page 15

Standard Input Lesen vom "standard input" (Tastatur) System.in ist static in System Der Datentyp von System.in ist InputStream. InputStream System.in.read liest einzelne Bytes Lesen von Tastatur import java.io.*; static String readln(){ InputStreamReader isr = new InputStreamReader ( System.in ); BufferedReader br = new BufferedReader ( isr ); String s = null; try { s = br.readline(); catch ( IOException ioe ) { System.err.println(ioe); return s; Page 16

Nutzen von Exceptions IO_5.java String filename = ""; BufferedReader kbd_reader; kbd_reader = new BufferedReader(new InputStreamReader(System.in)); BufferedReader file_reader = null ; while (file_reader== null) { try { System. out. print(" enter input file name: "); filename = kbd_reader.readline(); file_reader = new BufferedReader( new FileReader( filename)); catch (FileNotFoundException e) { System. out. println( filename + " does not exist."); System. out. println(" please try again"); catch (IOException e) { System. out. println(" Problems when reading from Keyboard"); // end while // now read from reader... Binärdateien (siehe auch DataIODemo.java) Zur Erinnerung: Textdateien: enthalten ASCII (oder Unicode) Zeichen. Binärdateien: enthalten Bytes mit binär Werten, nicht zur Interpretation als Zeichen gedacht. Beispiele:.class,.exe,.pdf,.doc. Eine Binärdatei ist ohne zugrundeliegendes Dateiformat bedeutungslos. Das Dateiformat stellt eine Interpretation der Daten bereit. Dateiformat = Abmachung wie eine Datei zu lesen ist. Page 17

DataOutputStream DataOutputstream zum Schreiben binärer Daten. OutputStream FileOutputStream DataOutputstream ObjectOutputStream Zur Erinnerung: Ein FileOutputstream schreibt einzelne Bytes. DataOutputStream übersetzt Java Datentypen in Byterepräsentation! DataOutputStream anwenden Erzeugen eines DataOutputStreams aus einem einfachen OutputStream! DataOutputStream ( OutputStream out) z.b. DataOutputStream binary_stream = new DataOutputStream ( new FileOutputStream (filename ) ); Wert: 42 DataOutputStream FileOutputStream Bytesequenz von 4 Bytes für int 42. Page 18

DataOutputStream Methoden void writeint(int) void writedouble(double) void writechar(char) void flush() void writeutf(string) Binäre Repräsentation eines Strings Binäre Repräsentationen sind Maschinen unabhängig! Binary Input DataInputstream zum lesen binärer Daten. InputStream FileInputStream DataInputstream ObjectInputStream InputStream: abstrakte Klasse zum Lesen einzelner Bytes. FileInputStream: einfache Klasse zum Lesen einzelner Bytes aus Dateien. DataInputStream übersetzt Byterepräsentation nach Java Datentypen! Page 19

DataInputStream Methoden DataInputStream binary_stream = new DataInputStream ( new FileInputStream (filename ) ); int readint() throws IOException double readdouble() throws IOException...... String readutf() throws IOException Page 20