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

Ähnliche Dokumente
Programmieren I. Kapitel 15. Ein und Ausgabe

Programmieren in Java

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

Java Fehlerbehandlung

Die elementare Ausgabe von Daten auf externe Medien, wie Dateien und das Einlesen davon wird demonstriert.

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

Universität Augsburg, Institut für Informatik Sommersemester 2005 Prof. Dr. Werner Kießling 15. Oktober 2005 Dr. Alfons Huhn, Timotheus Preisinger

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

Programmieren 2 Selbststudium Semesterwoche 6

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Vorlesung Informatik II

3. Grundlegende Sprachkonstruktionen imperativer Programme

Einführung in die Informatik Files and Streams

Software Entwicklung 1

Primitive Datentypen

Ein erstes Java-Programm

Ein- und Ausgabe in Java

Delegatesund Ereignisse

Repetitorium Informatik (Java)

PIWIN 1 Übung Blatt 5

II.1.1. Erste Schritte - 1 -

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

Java Einführung Klassendefinitionen

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

RO-Tutorien 3 / 6 / 12

Objektorientierte Programmierung

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

Distributed Computing Group

Große Übung Praktische Informatik 1

Deklarationen in C. Prof. Dr. Margarita Esponda

Java Input/Output System (IO)

stattdessen: geräteunabhängiges, abstraktes Format für Speicherung und Transfer von Daten Datei

Einstieg in die Informatik mit Java

Programmieren 2 10 Binäre und Objekt-IO

Javakurs für Anfänger

Javakurs zu Informatik I. Henning Heitkötter

5.4 Klassen und Objekte

Parallele Prozesse. Prozeß wartet

1 Polymorphie (Vielgestaltigkeit)

Einführung in die Programmierung

6 Ein- und Ausgabe. Bisher war unsere (Bildschirm-) Ausgabe leichtflüchtig (

Einführung in die Programmierung 1

Programmieren 2 09 File-IO

Beispiel: Methode mit einem Fehler. Diese Methode wird problematisch, wenn von außen eine Dauer von 0 Sekunden angegeben wird, etwa im Aufruf

von Anja Austermann Drag and Drop

Computeranwendung und Programmierung (CuP)

Einführung in die Informatik 2

Java Einführung Methoden in Klassen

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Datenbankanwendungsprogrammierung Crashkurs Java

Liste Programmieren Java Überblick

Einführung in die Programmierung Blockkurs Java

Vererbung & Schnittstellen in C#

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

Praktikum Betriebssysteme 1. Aufgabe (1)

Variablen manipulieren per JDI

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

Inhalt Streams Eingabe / Ausgbe in C Dateizugriff in C Eingabe / Ausgabe in C++ Dateizugriff in C++ Error Handling

Java Einführung Methoden. Kapitel 6

3 Objektorientierte Konzepte in Java

Überschreiben von Methoden

Programmierkurs Java

Referat: Netzwerkprogrammierung in Java

Java I Vorlesung Exceptions

C++-Zusammenfassung. H. Schaudt. August 18, 2005

Probeklausur: Programmierung WS04/05

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Repetitorium Informatik (Java)

Grundlagen. Die Komponenten eines C Programms. Das erste Programm

Klassenattribute und -methoden, Vererbung

Die Programmiersprache C

Musterlösungen zur Klausur Informatik 3

Aufgabe 1 (12 Punkte)

Java für Computerlinguisten

String s1, s2; Eine Zuweisung geschieht am einfachsten direkt durch Angabe des Strings eingeschlossen in doppelte Hochkommata:

Java Vererbung. Inhalt

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

4 Schleifen und Dateien

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Modellierung und Programmierung 1

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Programmieren in Java

3 Objektorientierte Konzepte in Java

Probeklausur: Programmierung WS04/05

Dr. Monika Meiler. Inhalt

Versuchsziele. Grundlagen. Überblick: FB Automatisierung und Informatik Betriebssysteme Thema: Bounded-Buffer-Problem. 3.

Objektorientierte Programmierung. Kapitel 12: Interfaces

Informationsverarbeitung

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9

Java Remote Method Invocation (RMI)

Theorie zu Übung 8 Implementierung in Java

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Algorithmen und Datenstrukturen

public class SternchenRechteckGefuellt {

Algorithmen und Programmierung II

Propädeutikum zur Programmierung

Übersicht. Vorstellung des OO-Paradigmas

Typumwandlungen bei Referenztypen

UNIVERSITÄT ULM Fakultät für Ingenieurswissenschaften und Informatik Institut für Datenbanken und Informationssysteme

Transkript:

Ziele dieses Kapitels Grundlagen der ierung Dr. Christian Herzog Technische Universität München! Sie verstehen das Konzept der Ströme Sie können n wie,, Input und Output benutzen.! Sie können in Java Dateien lesen und schreiben Wintersemester 2006/2007 Kapitel 11: Ein- und Ausgabe Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der ierung TUM Wintersemester 2006/07 Kapitel 11, Folie 1 2 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der ierung TUM Wintersemester 2006/07 Kapitel 11, Folie 2 Das Problem! In den Informatik-Systemen, die wir bisher implementiert haben, haben wir n deklariert, instantiiert und die Attribute mit Werten gefüllt. Die Werte waren allerdings nur während der Laufzeit des Systems verfügbar.! Häufig sollen Werte extern gespeichert werden, so dass sie bei einem erneuten Lauf wieder zur Verfügung stehen.! In vielen Fällen werden auch Werte von einem Informatik-System erzeugt, die dann von einem anderen System benötigt werden.! Bei interaktiven Systemen wollen wir bereits während der Ausführung Daten mit der Umgebung (Benutzer) austauschen: Wir wollen Werte über eine Tastatur eingeben lassen, andere Werte sollen auf dem Bildschirm erscheinen.! Zur Speicherung von Werten und zur Interaktion mit Benutzern führen wir jetzt die Konzepte Strom und Datei ein. Datei! Wir haben bereits die Kommunikation mit der Umgebung des Systems zugelassen, allerdings sehr spärlich. System.out.println(): Ausdrucken von Daten auf dem Bildschirm! Unser Ziel ist jetzt die Modellierung der Interaktion von Informatik- Systemen mit ihrer Umgebung.! Definition Datei: Eine Verwaltungseinheit zur Repräsentation von externen Daten nach gewissen Organisationsformen, die den Zugriff innerhalb des Informatik-Systems auf die Daten festlegen. Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der ierung TUM Wintersemester 2006/07 Kapitel 11, Folie 3 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der ierung TUM Wintersemester 2006/07 Kapitel 11, Folie 4

Speicherung von Dateien! Eine Datei ist mit einem Ein-Ausgabegerät, kurz E/A-Gerät, (engl. I/O device) verbunden, das die Daten einer Datei permanent speichern kann. Beispiele von E/A-Geräten: Platte, CD, DVD, Magnetband! Abhängig vom Typ der Daten in der Datei unterscheiden wir ebenfalls verschiedene Arten von Dateien: Text-Datei, Binär-Datei, Personal- Datei, Studenten-Datei,... Strom! Um auf Dateien innerhalb eines Informatik-Systems zugreifen zu können, führen wir den Begriff des Stroms(*) ein.! Definition Strom: Die interne Repräsentation einer (externen) Datei oder eines E/A-Gerätes in einem Informatik-System.! Definition Eingabe: Das Lesen der Daten von einer Datei oder einem Eingabegerät in einen Strom. Der Strom heißt dann Eingabestrom.! Definition Ausgabe: Das Schreiben von Daten eines Stroms auf eine Datei oder ein Ausgabegerät. Der Strom heißt dann Ausgabestrom. (*) Achtung: In Goos II hat der Begriff Strom eine andere Bedeutung. Bei Goos ist ein Strom ein Iterator über Daten. Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der ierung TUM Wintersemester 2006/07 Kapitel 11, Folie 5 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der ierung TUM Wintersemester 2006/07 Kapitel 11, Folie 6 Beispiele von Eingabe- und Ausgabeströmen! Eine Tastatur ist eine Quelle für einen Eingabestrom von Zeichen an ein. Tastatur! Ein Bildschirm ist ein Empfänger für einen Ausgabestrom von Zeichen von einem. Ausgabestrom Eingabestrom! Eine Datei ist Empfänger oder Quelle für Ströme von Zeichen Dateien Ausgabestrom Eingabestrom Bild Schirm Modellierung von Strömen! Wir modellieren Ströme als n. Allgemein:! Ein Strom hat mehrere Attribute: Datei: Name der mit dem Strom assoziierten Datei Marke: Zeiger auf das derzeitige Element (current element).! Ein Strom stellt gewöhnlich folgende Dienste bereit: Open(): Öffnen der Verbindung mit einer Datei / einem Gerät Read(): Lesen eines Elementes Write(): Schreiben eines Elementes Close(): Schließen der Verbindung mit der Datei / dem Gerät.! Die genaue Signatur der Dienste und die Implementierung von Strömen ist abhängig von der iersprache, die Implementierung von Dateien ist außerdem oft noch abhängig vom Betriebssystem.! Java unterstützt Ströme und Dateien. Die Methoden werfen i.a. Ausnahmen der IOException bzw. Unterklassen davon. Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der ierung TUM Wintersemester 2006/07 Kapitel 11, Folie 7 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der ierung TUM Wintersemester 2006/07 Kapitel 11, Folie 8

Ströme und Dateien in Java! Java stellt eine große Anzahl von unterschiedlichen Strömen für Ein- Ausgabe (,, Input, Output) und eine betriebssystem-unabhängige für Dateien (File) bereit, die alle im Paket java.io definiert sind. Object Input: Modelliert binäre Eingabeströme ByteArray Input FileInput FilterInput Input ObjectInput PipedInput Input Output File Abstrakte für textuelle Eingabeströme Abstrakte für textuelle Ausgabeströme Input Abstrakte für binäre Eingabeströme Output Abstrakte für binären Ausgabeströme File Plattform-unabhängige von Dateien Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der ierung TUM Wintersemester 2006/07 Kapitel 11, Folie 9 ByteArrayInputSteam FileInput FilterInput Buffered Input DataInput ObjectInput PipedInput Buffered Input DataInput Erlaubt das Lesen von Reihungen, als ob sie Ströme wären Ermöglicht das Lesen von Bytes aus Binär-Dateien Ermöglicht das Filtern von Daten auf verschiedene Arten Ermöglicht das Puffern von Eingabedaten Lesen von vordefinierten elementaren Java-Typen Zum Deserialisieren von Objekten Lesen von Daten aus einem anderen Thread Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der ierung TUM Wintersemester 2006/07 Kapitel 11, Folie 10 : Modelliert textuelle Eingabeströme Output: Modelliert binäre Ausgabeströme Output Buffered CharArray Input Piped String ByteArray Output FileOutput FilterOutput ObjectOutput PipedOutput LineNumber Buffered CharArray File Piped String LineNumber File Gepufferte Eingabe bei textuellen Eingabeströmen Eingabe-Operationen auf Reihungen vom Typ Char Zeicheneingabe bei Dateien Methoden zum Filtern von Zeicheneingaben Eingabe-Operationen für Zeichenketten (String) Zählt Anzahl der Text-Zeilen, die gelesen wurden. Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der ierung TUM Wintersemester 2006/07 Kapitel 11, Folie 11 ByteArrayOutputSteam FileOutput FilterOutput Buffered Output DataOutput ObjectOutput PipedOutput BufferedOutput DataOutput Erlaubt das Schreiben von Reihungen als ob sie Ströme wären Ermöglicht das Schreiben von Bytes in Binär-Dateien Ermöglicht das Filtern von Daten auf verschiedene Arten Ermöglicht das Puffern von Ausgabedaten Schreiben von vordefinierten elementaren Java-Typen Zum Serialisieren von Objekten Schreiben von Daten auf anderen Thread Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der ierung TUM Wintersemester 2006/07 Kapitel 11, Folie 12

: Modelliert textuelle Ausgabeströme Die Standard Ein/Ausgabe in Java basiert auf Strömen! Informelles Modell mit Strömen Buffered CharArray Output File Piped Print String Bild Schirm Die System.out ist ein Strom vom Typ Print System.out Speicher Buffered CharArray File Piped Print String Gepufferte Ausgabe bei textuellen Ausgabeströmen Ausgabe-Operationen auf Reihungen (Array of Char) Für Ausgabe auf Text-Dateien Methoden zum Filtern bei Ausgabe von Zeichen (Char) Textuelle Ausgabe von Java's Basistypen Ausgabe von Zeichenketten (String) Tastatur System.in System.in ist ein Strom vom Typ Input: Eingabe wird Byte für Byte gelesen Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der ierung TUM Wintersemester 2006/07 Kapitel 11, Folie 13 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der ierung TUM Wintersemester 2006/07 Kapitel 11, Folie 14 Wichtiges Konzept: Puffern von Daten! Definition Eingabepuffer (input buffer): Ein Bereich im Speicher für die temporäre Speicherung von bereits gelesenen aber noch nicht verarbeiteten Daten: Anstatt ein Byte nach dem anderen von dem Eingabegerät zu lesen, werden zunächst eine große Anzahl von Bytes gleichzeitig in den Puffer gelesen, Diese werden dann stückweise bei jeder Lese-Operation ins transferiert.! Definition Ausgabepuffer (output buffer): Eikn Bereich im Speicher für die temporäre Speicherung von zu schreibenden Daten. Daten werden erst auf das Ausgabegerät geschrieben, wenn der Puffer voll ist (oder bei einer sogenannten flush()-operation).! Puffer helfen, den Geschwindigkeitsunterschied zwischen langsamen Zugriffen auf Geräte/Dateien und schnellen Prozessoren auszugleichen. Wichtiges Konzept: Konkatenation von Strömen! Die Deklarationen File f = new File(fileName); Buffered b = new Buffered(f); konkatenieren zwei Ströme vom Typ Buffered und File.! Das kann dann b.readline() benutzen, um Zeile für Zeile - und nicht Zeichen für Zeichen - von der Text-Datei mit Namen filename zu lesen.! Interpretation: Die Daten fließen von der Text-Datei erst durch File, dann durch Buffered zum Speicher. Speicher 0100010 0100101 1111111 1111100 1100101 0111110 1111110 Buffered File Text Datei Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der ierung TUM Wintersemester 2006/07 Kapitel 11, Folie 15 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der ierung TUM Wintersemester 2006/07 Kapitel 11, Folie 16

Konkatenation von Ausgabeströmen! Die Deklarationen FileOutput fo = new FileOutput (filename); Print p = new Print (fo); konkatenieren zwei Ströme FileOutput und Print.! Das kann dann die bequemen Methoden p.print() und p.println() benutzen.! Interpretation: Die Daten fließen vom Speicher erst durch Print, dann durch FileOutput zur Text-Datei.! Bequem: Die Methoden von Print behandeln alle Ausnahmen, die bei FileOutput auftreten können, und deklarieren selbst keine. Speicher 0100010 0100101 1111111 1111100 1100101 0111110 1111110 Print FileOutput Text Datei Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der ierung TUM Wintersemester 2006/07 Kapitel 11, Folie 17 Wann benutzen wir welchen Strom?! Bei binärer Ein-Ausgabe: Unterklassen von Input und Output.! Bei Textueller Ein-Ausgabe: Unterklassen von und.! Beispiel: Print ist eine Unterklasse von. Sie stellt Methoden zur textuellen Ausgabe von Objekten vom Typ int, long, float, double, String und Object bereit: public void print(int i); public void print(long l); public void print(float f); public void print(double d); public void print(string s); public void print(object o); public void println(int i); public void println(long l); public void println(float f); public void println(double d); public void println(string s); public void println(object o); Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der ierung TUM Wintersemester 2006/07 Kapitel 11, Folie 18 Verbindung von Dateien bzw. Geräten und Strömen! Jede iersprache muss ein Konzept bereitstellen, um Ströme mit Dateien zu verbinden. In Java geschieht die Verbindung im Konstruktor der Strom-, die mit dem Dateinamen als Argument aufgerufen wird.! Beispiel: String filename = "/home/bob/src/trivial.java"; File f = new File(fileName); verbindet den Ausgabestrom f mit einer Datei namens /home/bob/src/trivial.java. Standard-Ein-/Ausgabe in Java! Die System stellt in Java über nvariablen Ströme bereit, die mit der Tastatur (System.in) und dem Bildschirm (System.out bzw. System.err) verbunden sind: Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der ierung TUM Wintersemester 2006/07 Kapitel 11, Folie 19 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der ierung TUM Wintersemester 2006/07 Kapitel 11, Folie 20

Ein Beispiel: Kopieren vom Dateien! Wie wollen in einer FileUtils eine Methode copyfile() zur Verfügung stellen, die zwei Dateinamen als Parameter erhält und die eine Datei in die andere kopiert. Importieren der nimport java.io.*; Bezeichner aus dem Paket class FileUtils { java.io (Siehe Kapitel 12) public static void copyfile (String inputfile, String outputfile) { // Es wird versucht, die Eingabedatei zum Lesen zu oeffnen: File f = null; try { f = new File (inputfile); catch (FileNotFoundException e) { System.out.println("Fehler: Die Datei " + inputfile + " konnte nicht zum Lesen geoeffnet werden."); System.exit(97); // Konkatenation von Eingabestroemen: Buffered b = new Buffered(f); Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der ierung TUM Wintersemester 2006/07 Kapitel 11, Folie 21 Kopieren vom Dateien (cont d) // Versuch, die Ausgabedatei zum Schreiben zu oeffnen: FileOutput fo = null; try { fo = new FileOutput (outputfile); catch (IOException e) { System.out.println("Fehler: Die Datei " + outputfile + " konnte nicht zum Schreiben geoeffnet werden."); System.exit(98); // Konkatenation von Ausgabestroemen: Print p = new Print (fo); Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der ierung TUM Wintersemester 2006/07 Kapitel 11, Folie 22 Kopieren vom Dateien (cont d) // Der Inhalt der Eingabedatei wird zeilenweise in die // Ausgabedatei kopiert: try { String inputline; do { // Eine Zeile lesen: inputline = b.readline(); // Beim Dateiende wird der null-pointer geliefert: if (inputline!= null) // Die Zeile schreiben: p.println(inputline); while (inputline!= null); // Solange kein Dateiende // Schliessen der Stroeme: b.close(); p.close(); catch (IOException e) { System.out.println("Fehler: " + e); System.exit(99); // copyfile() // class FileUtils Zusammenfassung! Eine Datei ist eine Sammlung von Daten, die extern auf einem Sekundärspeicher (Platte, CD, Band) gespeichert sind.! Ein Strom ist ein Objekt, das Daten von anderen Objekten holt oder zu anderen Objekten liefert. Ein Eingabestrom liefert Daten von einer externen Quelle zu einem. Ein Ausgabestrom liefert Daten vom zu einem externen Gerät oder einer Datei.! Puffer ist ein temporärer Bereich im Hauptspeicher, um Daten während der Ein- oder Ausgabe zu speichern.! Java stellt eine Vielzahl von n zur Implementierung von Strömen bereit.! Durch Konkatenation von Strömen erhält man einen Gesamtstrom mit jeweils optimaler Schnittstelle zum auf der einen Seite und zur Datei bzw. zum Gerät auf der anderen Seite. Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der ierung TUM Wintersemester 2006/07 Kapitel 11, Folie 23 Copyright 2006 Bernd Brügge, Christian Herzog Grundlagen der ierung TUM Wintersemester 2006/07 Kapitel 11, Folie 24