Modellierung & Programmierung 1. Streams. Dr. Mathias Goldau



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

Programmieren I. Kapitel 15. Ein und Ausgabe

Vorlesung Programmieren

Java Input/Output System (IO)

Einstieg in die Informatik mit Java

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

File (io) Problem. Methoden von File werfen keine Exceptions. Größere Verzeichnis-Auflistungen können das System ausbremsen

Java Fehlerbehandlung

Ausnahmen. Gilbert Beyer und Annabelle Klarl. Einführung in die Informatik. Zentralübung zur Vorlesung Einführung in die Informatik

Arten von Streams. Daten. Bytes (8-Bits) Java Programm. Daten. Java Programm. Characters (16 - Bits)

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

Ausnahmen. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Dr. Monika Meiler. Inhalt

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

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

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

Ausnahmen. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Info B VL 7: Input/Output

Datenströme in Java. Zeichenkonvertierung

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

Modellierung und Programmierung 1

Java Einführung IO (Eingabe/Ausgabe)

Ausnahmen. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

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

Client-Server TCP/IP - Kodierung

Ausnahmen. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Einführung zur Aufgabengruppe 2

Vorlesung Programmieren

Umleitung von Datenströmen

Ausnahmen. Dr. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Handbuch konsultieren!

Abschnitt 18: Beispiel: I/O-Streams

Programmieren 2 09 File-IO

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

Client-Server TCP/IP - Kodierung

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

Java I/O, Serialisierung und Netzwerkprogrammierung

Ausnahmebehandlung PK11W-16,

Programmieren in Java

Socket-Programmierung unter Java

Einführung zur Aufgabengruppe 2

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

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

Ausdrucksbäume in verschiedenen Darstellungen

PROG 2: Einführung in die Programmierung für Wirtschaftsinformatiker

Socket-Programmierung unter Java

Programmieren 2 Selbststudium Semesterwoche 6

Java Einführung Exception Handling. Kapitel 17

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

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

Modellierung und Programmierung 1

Software Entwicklung 1

Dateien, Streams. INE2 M. Thaler, Office TG ZHAW, M. Thaler, K. Rege, G. Burkert, E.

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

Grundlagen der Objektorientierten Programmierung - Ein- / Ausgabe-Streams

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

5.2 Input/Output mit Dateien

Wie schreibt bzw. wie liest man die beiden unterschiedlichen Darstellungen?

Dateien. DVG Dateien 1

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

Klassen und Objekte. Objekte einer Klasse bilden

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

Wo sind wir? Rudolf Berrendorf FH Bonn-Rhein-Sieg Programmiersprache Java 313

Ausnahmen und IO. Fehler, Ausnahmen, Java- Exception, throw, catch, Ströme, Puffer, Dateien lesen, schreiben, Tastatur, Terminal, HTTP

Ein- und Ausgabe. Algorithmen und Datenstrukturen II 1

II.1.1. Erste Schritte - 1 -

Lösungshinweise/-vorschläge zum Übungsblatt 11: Software-Entwicklung 1 (WS 2017/18)

CS1005 Objektorientierte Programmierung

Javakurs für Anfänger

Streams. Thomas Schwotzer

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

Verteilte Systeme - Java Networking (Sockets) 2 -

Algorithmen und Datenstrukturen II

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Ausnahmen

Programmiertechnik Ausnahmen

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

Autoboxing - Nachtrag

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

Java I Vorlesung Exceptions

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

Programmieren 2 09 File-IO

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

Lösungsvorschläge zur Nachklausur zum Kurs 1618 Sommersemester 2001 am

Dateien/Streams. Arthur Zaczek. Okt 2015

3.11 Ausnahmen und Ein-/Ausgabe

Grundlagen der Informatik für Ingenieure I

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

1. Betrachte das folgende Programm:

Dateien/Streams. Arthur Zaczek

Transkript:

Modellierung & Programmierung 1 Streams Dr. Mathias Goldau

Ein- und Ausgabe - EVA Prinzip 1 Jedes informationsverarbeitende System folgt dem EVA Prinzip: Eingabe-Verarbeitung-Ausgabe (IPO) Beispiel: Computerspiele als informationsverarbeitende Systeme Eingabe: Tastatur, Maus, Controller, Touchscreen,... Verarbeitung: Fahrsimulator, Rollenspiel, Jump n Run,... Ausgabe: Monitor, Audio, Controller Feedback,... Struktur von informationsverarbeitenden Systemen beschreibbar Eingabe und Ausgabe können durch Datenströme abstrahiert werden Beispiele für Datenströme: Video-Streams Logfiles (Protokolldateien) Heartbeat Wetterdaten

Datenströme (Streams) 2 Datenströme repräsentieren eine Datensequenz eines festen Datentyps Sie arbeiten nach dem First-In-First-Out (FIFO) Prinzip Daten müssen Serialisierbar sein Man unterscheidet zwischen: Eingabe- und Ausgabe-Strom (lesen und schreiben) Gepufferten und ungepufferten Strom Anwendungen im Datentransfer: Duplizierung Archivierung, Zwischenspeichern Kommunikation Manipulation Konvertieren Filtern Datenströme können hintereinander geschaltet werden (Pipeline)

Datenströme (Streams) 3

Input/Output in Java 4 Java abstrahiert I/O von Datenquelle und Datenziel mittels Streams Oracle Tutorial zu Streams Im Laufe der Java-Evolution viele I/O Packages: Java 1.0.2: java.io Java 1.4.2: java.nio (new/non-blocking IO) Java 7 : java.nio (Verbesserte API: NIO.2) java.io zusammen mit java.nio bilden das Grundgerüst Einige Bestandteile veraltet: java.io.file java.nio.file.path

Input/Output in Java 5 In Java gibt es hinsichtlich des Datentyps zwei wesentliche Streams Byte Streams: (8-bit) Character Streams: (16-bit wegen UTF-16) Andere Datentypen (Objekte, Primitive Types) werden auf Byte Streams zurückgeführt Orthogonal dazu unterscheidet Java auch zwischen Eingabe und Ausgabe Streams und zwischen Gepufferten und ungepufferten Streams Streams sollten immer nach Benutzung geschlossen werden (wenn man sie auch selbst erzeugt hat)

Namenskonventionen für Stream-Klassen in Java 6 Byte Streams erben in Java immer von InputStream oder OutputStream und enden meist auf Stream. Beispiele: PrintStream, CipherOutputStream, BufferedInputStream Character Streams erben in Java immer von Writer oder Reader und enden meist auf Reader oder Writer. Beispiele: FileReader, StringReader, BufferedWriter Konvertierung Byte Character Stream: InputStreamReader, OutputStreamWriter Character Byte Stream: Kein direkter Weg Jeder Byte und jeder Character Stream können gepuffert werden: BufferedWriter, BufferedReader, BufferedInputStream, BufferedOutputStream Scanner und Formatting API: Scanner extrahiert Wörter (Tokens) mit Hilfe von regulären Ausdrücken PrintWriter oder PrintStream kombinieren Tokens anhand von Platzhaltern (vgl. format u. printf)

Standard Streams 7 In Java sind wir schon Streams in Form der Standard Streams begegnet Betriebssysteme stellen oft jedem Programm drei Streams zur Verfügung: System.in (für Eingabe) System.out (für Ausgabe) System.err (für Fehlermeldungen) Wo werden diese Streams geschlossen? Von der Virtuellen Maschine! Historisch bedingt sind alle drei Byte Streams PrintStream emuliert vieles eines Character Streams System.err und System.out sind jeweils ein PrintStream System.in ist ein InputStream Sicherheitskritische Eingaben besser mit System.Console und readpassword (Kein Echo auf der Konsole)

Beispiel Byte Stream 8 1 import java.io.ioexception; 2 import java.util.arrays; 3 4 /* liest max. 10 Bytes von Tastatur, gibt diese auf der Konsole aus */ 5 public class Read10Bytes { 6 public static void main( String[] args ) { 7 byte[] bytes = new byte[10]; // Feld zum Lesen 8 try { 9 System.out.println( "Maximal 10 Bytes eingeben:" ); 10 int bytesanzahl = System.in.read(bytes); 11 System.out.print( "Es wurden " + bytesanzahl + " B eingelesen: " ); 12 System.out.write(bytes); 13 System.out.println(); 14 System.out.println( Arrays.toString( bytes ) ); // bytes ansehen 15 } 16 catch( IOException e ) { // Fehlerbehandlung allgemein 17 System.err.println( "IO-Error: " + e ); 18 } 19 } 20 }

Beispiel Byte Stream 9 1 #> java Read10Bytes 2 Maximal 10 Bytes eingeben: 3 123456789ü 4 Es wurden 10 B eingelesen: 123456789? 5 [49, 50, 51, 52, 53, 54, 55, 56, 57, -61] 6 Fertig!

Beispiel Character Stream 10 1 import java.io.ioexception; 2 import java.io.inputstreamreader; // direct descendant from Reader 3 import java.util.arrays; 4 5 /* liest max. 10 Zeichen von Tastatur, gibt diese auf der Konsole aus */ 6 public class Read10Chars { 7 public static void main( String[] args ) { 8 char[] data = new char[10]; // Feld zum Lesen 9 try { 10 System.out.println( "Maximal 10 Zeichen eingeben:" ); 11 InputStreamReader in = new InputStreamReader( System.in ); 12 int zeichenanzahl = in.read( data ); 13 System.out.println( "Es wurden " + zeichenanzahl + " Zeichen eingelesen: " ); 14 System.out.println( new String( data ) ); 15 System.out.println(); 16 System.out.println( Arrays.toString( data ) ); 17 } 18 catch( IOException e ) { // Fehlerbehandlung allgemein 19 System.err.println( "IO-Error: " + e ); 20 } 21 } 22 }

Beispiel Character Stream 11 1 #> java Read10Chars 2 Maximal 10 Zeichen eingeben: 3 üöäüöäüöäß 4 Es wurden 10 Zeichen eingelesen: 5 üöäüöäüöäß 6 7 [ü, ö, ä, ü, ö, ä, ü, ö, ä, ß]

Beispiel Buffered Streams 12 1 import java.io.ioexception; 2 import java.io.inputstreamreader; 3 import java.io.bufferedreader; 4 5 /* liest eine Zeile von Tastatur und gibt diese auf der Konsole aus */ 6 public class ReadLine 7 { 8 public static void main( String[] args ) 9 { 10 String line = new String(); 11 try 12 { 13 System.out.println( "Geben Sie eine Zeile ein:" ); 14 BufferedReader in = new BufferedReader( new InputStreamReader( System.in ) ); 15 line = in.readline(); 16 System.out.println( "Ein Zeile mit: " + line.length() + " Unicode Einheiten wurde eingegeben:" ); 17 System.out.println( line ); 18 } 19 catch( IOException e ) // Fehlerbehandlung allgemein 20 { 21 System.err.println( "IO-Error: " + e ); 22 } 23 } 24 }

Primitive und Object Streams 13 Primitive Streams: DataInputStream und DataOutputStream haben read und write Methoden für alle primitiven Datentypen und String-Werte. Sie implementieren das DataInput bzw. das DataOutput Interface DataInputStream und DataOutputStream haben Konstruktoren für InputStream und OutputStream Object Streams: Analog zu DataInputStream und DataOutputStream aber mit den Klassen ObjectOutputStream und ObjectInputStream und Interfaces ObjectInput und ObjectOutput Objekte können wiederum Referenzen anderer Objekte beinhalten (evtl. zyklische Abhängigkeiten) Objekte müssen serialisierbar sein und daher Serializable implementieren Oracle Guide on Serialization Vorlesungsfolien Serialisierung Ein Objekt kann in einem Stream nicht dupliziert werden: Object o = new Object(); out.writeobject( o ); // frist write out.writeobject( o ); // second write

Beispiel Primitive Streams 14 1. Programm schreibt Daten auf Standardausgabe 2. Programm liest Daten von Standardeingabe Beide Programme über Pipe verbunden: #> java RandomNumber java RandomNumberReader Am Beispiel eines Arrays von Double-Werten

Beispiel Primitive Streams: 1. Programm 15 1 import java.util.arrays; 2 import java.io.dataoutputstream; 3 import java.io.ioexception; 4 5 public class RandomNumbers { 6 public static void main( String[] args ) { 7 double[] data = { 0.3, 1.1, 124, 4.0, -9.99, 0.49 }; 8 System.err.println( "Send: " + Arrays.toString( data ) ); 9 10 DataOutputStream out = new DataOutputStream( System.out ); 11 12 try { 13 for( double d : data ) { 14 out.writedouble( d ); 15 } 16 } 17 catch( IOException e ) { 18 System.err.println( "IOError: " + e ); 19 } 20 System.err.println( "Sending done." ); 21 } 22 }

Beispiel Primitive Streams: 2. Programm 16 1 import java.util.arrays; 2 import java.io.datainputstream; 3 import java.io.ioexception; 4 5 public class RandomNumbersReader { 6 public static void main( String[] args ) { 7 double[] data = new double[6]; 8 9 DataInputStream in = new DataInputStream( System.in ); 10 11 try { 12 for( int i = 0; i < 6; i++ ) { 13 data[i] = in.readdouble(); 14 } 15 } 16 catch( IOException e ) { 17 System.err.println( "IOError: " + e ); 18 } 19 System.err.println( "Got: " + Arrays.toString( data ) ); 20 } 21 }

Beispiel Primitive Streams: Output 17 #> java RandomNumber java RandomNumberReader Send: [0.3, 1.1, 124.0, 4.0, -9.99, 0.49] Sending done. Got: [0.3, 1.1, 124.0, 4.0, -9.99, 0.49]

Dateien in Java 18 Nutzen Sie die Packages java.nio.file und java.nio.file.attribute Verwenden Sie in neuen Projekten nicht java.io.file, da: Viele Methoden keine Exceptions werfen wenn sie fehlschlagen. rename Methode arbeitet nicht einheitlich auf allen Plattformen Keine Unterstützung für Verknüpfungen (Symlinks) Ineffizienter Zugriff auf Metadaten Viele Methoden bei sehr großen Verzeichnissen langsam... Dennoch unterstützt auch Java 8 noch java.io.file Ab Java 7 werden Dateien und Verzeichnisse (Ordner) durch einen Pfad (Path) abstrahiert

Paths 19 Dateisystem organisiert Verzeichnisse (Ordner), Dateien und Verknüpfungen meist hierarchisch als Baum Eine Datei wird durch einen Pfad (Path) identifiziert /home/sally/statusreport bzw. C:\home\sally\statusReport

Paths 20 Man unterscheidet zwischen: Relativen Pfaden:../math/Foobar/../SVD.java, john/doe Absoluten Pfaden: /home/math/mnt/../foobar/src/svd.java, C:\etc Pfade ohne Redundanzen bezeichnet man in Java als normiert Verknüpfungen (links) bezeichnet man in vielen Systemen als symbolic link, kurz symlink. Sie sind wie ein Alias zu verstehen. Achtung, hierbei können Zyklische Verweise entstehen! Pfade werden in Java durch das Interface java.nio.file.path realisiert Beinhaltet: Dateiname, Verzeichnisliste Wird benutzt um Dateien zu lokalisieren, zu modifizieren, zu lesen,... Eine Path Instanz ist nicht plattformunabhänig Viele Operationen mit Helferklasse java.nio.files.files Es gibt viele verschiedene Implementierungen von Paths für verschiedenste Dateisysteme

Path Operationen 21 Ein Path muss nie zwangsläufig existieren Path p1 = Paths.get( "/tmp/foo" ); Path p2 = FileSystems.getDefault().getPath( "/tmp/foo" ); Path p3 = Paths.get( System.getProperty( "user.home" ), ".my.log" ); Für eine plattformunabhänige Referenz des Benutzerverzeichnisses Redundanzen entfernen mit normalize(): /tmp/../etc /etc Paths vergleichen mit Path.equals(): p1.equals( p2 ) Paths vereinigen mit Path.resolve(): p1.resolve("bar") /tmp/foo/bar Beispiel: Path path = Paths.get("/home/joe/foo"); Method Solaris OS MS Windows tostring() /home/joe/foo C:\home\joe\foo getfilename() foo foo getname(0) home home getnamecount() 3 3 subpath(0,2) home/joe home\joe getparent() /home/joe \home\joe getroot() / C:\

Dateioperationen - Existenz, Zugriff und Attribute 22 Überprüfen der Existenz einer Datei / eines Verzeichnisses: Die Datei existiert: Files.exists( path ) ist true Die Datei existiert nicht: Files.notExists( path ) ist true Die Existenz ist unbekannt (evtl. ungenügende Rechte zur Überprüfung): Files.exists( path ) und Files.notExists( path ) liefern false In Java bietet zusätzlich Methoden um Zugriffsrechte zu überprüfen: Lesbarkeit: Files.isReadable( path ) Schreibbar: Files.isWritable( path ) Ausführbar: Files.isExecutable( path ) Weiterführende Attribute: isdirectory isregularfile issymboliclink ishidden getowner und setowner vlg. java.nio.files.attributes

Dateioperationen - Löschen, Kopieren und Verschieben 23 Löschen: Files.delete( path ) und Files.deleteIfExists( path ) Kopieren: Files.copy( path1, path2, OPTIONS ) Optionen sind: REPLACE_EXISTING, COPY_ATTRIBUTES,... Verschieben: Files.move( path1, path2, OPTIONS ) Optionen sind: REPLACE_EXISTING, ATOMIC_MOVE

Dateien Lesen und Schreiben 24 Java bietet eine Vielzahl an Möglichkeiten um Dateien zu lesen und zu schreiben Ohne direkten Zugriff auf Streams (für kleine Dateien): Files.readAllBytes( path ) Files.readAllLines( path ) Files.write( path, bytes, options ) Files.write( path, lines, options ) Streambasierten Zugriff: Files.newBufferedReader( path ) Files.newBufferedWriter( path ) Files.newInputStream( path ) Files.newOutputStream( path ) Weiterführende Zugriffe: Channel,...

Beispiel: Hello File! 25 1 import java.util.arrays; 2 import java.nio.file.files; 3 import java.nio.file.paths; 4 import java.nio.file.standardopenoption; 5 import java.nio.charset.standardcharsets; 6 import java.io.ioexception; 7 8 public class HelloFile { 9 public static void main( String[] args ) { 10 try { 11 Files.write( Paths.get( args[0] ), Arrays.asList( "Hello File!" ), 12 StandardCharsets.UTF_8, StandardOpenOption.CREATE ); 13 } catch ( IOException e ) { 14 System.err.println( "Error: " + e ); 15 } 16 } 17 } 1 #>ls -l foobar.txt 2 ls: cannot access foobar.txt: No such file or directory 3 #> java HelloFile foobar.txt 4 #> ls -l foobar.txt 5 -rw-r--r-- 1 math math 12 Jan 20 15:05 foobar.txt 6 #> cat foobar.txt 7 Hello File!

Beispiel: Textdatei in Liste zeilenweise einlesen 26 1 import java.io.ioexception; 2 import static java.nio.charset.standardcharsets.*; 3 import java.nio.file.*; // Files, Paths, Path 4 import java.util.list; 5 6 public class ReadTextFile { 7 public static void main( String[] args ) { 8 try { 9 Path file = Paths.get( args[0] ); 10 List< String > lines = null; 11 lines = Files.readAllLines( file, UTF_8 ); 12 System.out.println( lines ); 13 } catch ( IOException e ) { 14 System.err.println( "Error: " + e ); 15 } 16 } 17 } 1 #> java ReadTextFile foobar.txt 2 [Hello File!] 3 #> java ReadTextFile /etc/shadow 4 Error: java.nio.file.accessdeniedexception: /etc/shadow

Beispiel: Byte Streams 27 1 import java.io.inputstream; 2 import java.io.ioexception; 3 import java.nio.file.*; // Files, Paths, Path 4 5 public class ReadFileByteByByte { 6 public static void main( String[] args ) { 7 Path file = Paths.get( args[0] ); 8 try( InputStream in = Files.newInputStream( file ) ) { 9 int data = 0; 10 while((data = in.read())!= -1) { 11 System.out.write(data); 12 } 13 } catch( IOException e ) { 14 System.err.println( "Error: " + e ); 15 } 16 } 17 } 1 #> java ReadFileByteByByte foobar.txt 2 Hello File!

Beispiel: Buffered Character Streams 28 1 import java.io.*; // IOException, BufferedReader 2 import static java.nio.charset.standardcharsets.*; 3 import java.nio.file.*; // Files, Paths, Path 4 5 public class ReadTextFileLineByLine { 6 public static void main( String[] args ) { 7 Path file = Paths.get( args[0] ); 8 try( BufferedReader in = Files.newBufferedReader( file, UTF_8 ) ) { 9 String line = null; 10 int linenumber = 1; 11 while( ( line = in.readline() )!= null ) { 12 System.out.println( linenumber + ": " + line ); 13 linenumber++; 14 } 15 } catch ( IOException e ) { 16 System.err.println( "Error: " + e ); 17 } 18 } 19 } 1 #> java ReadTextFileLineByLine /etc/resolv.conf 2 1: # Generated by NetworkManager 3 2: search informatik.uni-leipzig.de informatik.uni-leipzig.de. 4 3: nameserver 8.8.8.8 5 4: nameserver 8.8.4.4

Beispiel: Objekte in Datei 29 Wollen eigene Objekte in Datei schreiben Mitarbeiter Klasse wie folgt: 1 import java.io.serializable; 2 3 public class Mitarbeiter implements Serializable { 4 Mitarbeiter( String name, double gehalt ) { 5 _name = name; 6 _gehalt = gehalt; 7 } 8 9 public String tostring() { 10 return super.tostring() + "[ " + _name + ", " + _gehalt + " ]"; 11 } 12 13 String _name = ""; 14 double _gehalt = 0.0; 15 }

Beispiel: Objekte in Datei 30 1 import java.nio.file.*; 2 import java.io.*; 3 import java.util.*; 4 5 public class WriteObjects { 6 public static void main( String[] args ) { 7 Mitarbeiter klaus = new Mitarbeiter( "Klaus Klausen", 1234.56 ); 8 Path file = Paths.get( args[0] ); 9 try( OutputStream os = Files.newOutputStream( file ); 10 ObjectOutputStream out = new ObjectOutputStream( os ); ) { 11 out.writeobject( klaus ); 12 out.writeobject( klaus ); 13 } catch( IOException e ) { 14 System.err.println( "Error: " + e ); 15 } 16 } 17 }

Beispiel: Objekte aus Datei 31 1 #> java WriteObjects MA.dat 2 #> java ReadObjects MA.dat 3 Mitarbeiter@7eaadc2d[ Hans Hansen, 1234.56 ] 4 Mitarbeiter@7eaadc2d[ Hans Hansen, 1234.56 ] 1 import java.nio.file.*; 2 import java.io.*; 3 import java.util.*; 4 5 public class ReadObjects { 6 public static void main( String[] args ) { 7 Mitarbeiter[] klaus = new Mitarbeiter[2]; 8 Path file = Paths.get( args[0] ); 9 try( InputStream is = Files.newInputStream( file ); 10 ObjectInputStream in = new ObjectInputStream( is ); ) { 11 klaus[0] = (Mitarbeiter) in.readobject(); 12 klaus[1] = (Mitarbeiter) in.readobject(); 13 System.out.println( Arrays.toString( klaus ) ); 14 klaus[0]._name = "Hans Hansen"; 15 System.out.println( Arrays.toString( klaus ) ); 16 } catch( IOException e ) { 17 System.err.println( "Error: " + e ); 18 } catch( ClassNotFoundException e ) { 19 System.err.println( "CastError: " + e ); 20 } 21 } 22 }