Datenstrome

Werbung
© 2005 Pohlig - Taulien
Datenströme
Datenströme GK Informatik
1
© 2005 Pohlig - Taulien
Ausgabe in eine Datei
Das Schreiben in eine Datei kann man sich in drei Schritte
aufgeteilt vorstellen:
• Erzeuge eine FileOutputStream-Objekt und übergib
ihm dabei den Namen der Datei als ein String-Objekt.
• Erzeuge ein PrintWriter-Objekt und übergib ihm
dabei das soeben erzeugte FileOutputStreamObjekt.
• Benutze die Objekt-Methode println(String text)
der Klasse PrintWriter, um eine Zeichenkette 'auf
einen Rutsch' in die Datei zu schreiben und schließe das
PrintWriter-Objekt.
Datenströme GK Informatik
2
© 2005 Pohlig - Taulien
Ausgabe in eine Datei
Der letzte Schritt etwas genauer:
println(String text) übergibt eine ganze Zeichenkette
an das FileOutputStream-Objekt.
Das Auslesen aus dieser Ausgabe-Pipeline und Schreiben in
die Datei schließlich, leistet das Betriebssystem.
Datenströme GK Informatik
3
© 2005 Pohlig - Taulien
Ausgabe in eine Datei
Ein Programm-Fragment:
...
String dateiName = "Test.txt";
FileOutputStream speicherStrom =
new FileOutputStream(dateiName);
PrintWriter schreibeStrom =
new PrintWriter(speicherStrom);
schreibeStrom.println(text);
schreibeStrom.close();
...
Datenströme GK Informatik
4
© 2005 Pohlig - Taulien
Ausgabe auf den Bildschirm
Objekte der Klasse PrintWriter kann man z.B. auch dazu
benutzen, Daten an einen Bildschirm zu senden:
• Erzeuge ein PrintWriter-Objekt und übergib ihm
dabei den Standard-Ausgabestrom System.out.
• Benutze die Objekt-Methode println(String text)
der Klasse PrintWriter, um eine Zeichenkette 'auf
einen Rutsch' auf den Bildschirm zu schreiben und
schließe das PrintWriter-Objekt.
Datenströme GK Informatik
5
© 2005 Pohlig - Taulien
Ausgabe in eine Datei und auf den Bildschirm
import java.io.*;
public class Ausgaben {
public static void main (String[] args)
throws IOException {
String text = "Java ist toll!";
String dateiName = "Test.txt";
FileOutputStream speicherStrom =
new FileOutputStream(dateiName);
PrintWriter schreibeStrom1 =
new PrintWriter(speicherStrom);
schreibeStrom1.println(text);
schreibeStrom1.close();
PrintWriter schreibeStrom2 =
new PrintWriter(System.out);
schreibeStrom2.println(text);
schreibeStrom2.close();
}
}
Datenströme GK Informatik
6
© 2005 Pohlig - Taulien
PrintWriter
Dem Konstruktor von PrintWriter kann sowohl eine Instanz
von FileOutputStream
als auch von PrintStream übergeben werden:
Beide Klassen sind von OutputStream abgeleitet:
Ein FileOutputStream-Objekt ist auch
ein OutputStream-Objekt.
Ein PrintStream-Objekt ist auch ein
FilterOutputStream-Objekt
und auch ein OutputStream-Objekt.
Datenströme GK Informatik
7
© 2005 Pohlig - Taulien
OutputStream-Objekte
Die Kapselung der Daten in ein FileOutputStream- bzw. in
ein PrintStream-Objekt erlaubt einen komfortablen Umgang
mit Daten-Strömen.
Java-Programm
Grafisch lässt sich das so darstellen:
OutputStream-Objekte
PrintWriterObjekt
System.out
Bildschirm
PrintWriterObjekt
FileOutputStreamObjekt
Festplatte
Übernimmt das Betriebsystem
Datenströme GK Informatik
8
© 2005 Pohlig - Taulien
Lesen aus einer Datei
Das Lesen aus einer Datei kann man sich in zwei Schritte
aufgeteilt vorstellen:
• Ein BufferedReader-Objekt liest aus einer
Eingabe-Pipeline.
• Die Methode readLine() aus dieser Klasse liest aus der
Pipeline den ganzen Inhalt und übergibt ihn Java als
Zeichenkette.
Datenströme GK Informatik
9
© 2005 Pohlig - Taulien
Lesen aus einer Datei
import java.io.*;
public class Einlesen {
public static void main (String[] args)
throws IOException {
String dateiName = "Test.txt";
FileReader dateiLeser =
new FileReader(dateiName);
BufferedReader eingabe1 =
new BufferedReader(dateiLeser);
String text1 = eingabe1.readLine();
System.out.println(text1);
InputStreamReader vonTastatur =
new InputStreamReader(System.in);
BufferedReader eingabe2 =
new BufferedReader(vonTastatur);
String text2 = eingabe2.readLine();
System.out.println(text2);
}
}
Datenströme GK Informatik
10
© 2005 Pohlig - Taulien
FileReader
Dem Konstruktor von BufferedReader kann sowohl eine
Instanz von FileReader
als auch von InputStreamReader übergeben werden:
Beide Klassen sind von Reader abgeleitet:
Ein FileReader-Objekt ist auch ein
Reader-Objekt.
Ein InputStreamReader ist auch ein
ein Reader-Objekt.
Datenströme GK Informatik
11
© 2005 Pohlig - Taulien
InputStreamReader
• Ein InputStreamReader ist eine Brücke
zwischen byte-Strömen und characterStrömen:
• Er liest bytes und decodiert sie in char-Zeichen,
wobei ein bestimmtes charset verwendet wird.
Das verwendete charset kann entweder explizit
angegeben werden oder es wird das Standardcharset der jeweiligen Plattform verwendet.
Datenströme GK Informatik
12
© 2005 Pohlig - Taulien
Daten an einen anderen Rechner im Netzwerk senden
Die Palette von Ausgabeströmen wird erweitert.
Ziel des Stromes soll ein weiterer Rechner im Netzwerk sein.
Java-Programm
OutputStream-Objekte
PrintWriterObjekt
System.out
Bildschirm
PrintWriterObjekt
FileOutputStreamObjekt
Festplatte
anschluss.
getOutputStream()
Ein anderer
Rechner im
Netz
PrintWriterObjekt
Datenströme GK Informatik
13
© 2005 Pohlig - Taulien
Senden von Daten an einen entfernten Rechner
Man benötigt dazu ein Socket-Objekt, das man sich als eine
Art Verbindungsstecker vorstellen kann.
Der Konstruktor erwartet als Parameter die Bezeichnung des
entfernten Rechners (z. B. seine IP-Adresse) und einen Port,
über den die Kommunikation laufen soll.
Mit der Methode getOutputStream() liefert das SocketObjekt den Ausgabestrom für den Zielrechner.
Datenströme GK Informatik
14
© 2005 Pohlig - Taulien
Der Client
import java.net.*; //enthält die Klasse Socket
import java.io.*;
public class Client {
}
public static void main (String[] args)
throws IOException,
UnknownHostException {
Socket anschluss = new Socket("127.0.0.1", 6000);
PrintWriter schreibeStrom =
new PrintWriter(
anschluss.getOutputStream(), true);
schreibeStrom.println("Ich gruesse Dich");
}
Damit die Daten gesendet werden können, muss der
entfernte Rechner empfangsbereit sein.
Datenströme GK Informatik
15
© 2005 Pohlig - Taulien
Daten von einem entfernten Rechner empfangen
Ein anderer
Rechner im
Netz
lauschen.
getInputStream()
Datenströme GK Informatik
InputStreamReaderObjekt
Java-Programm
Um Daten von einem Rechner im Netzwerk empfangen zu
können, benötigt man einen Eingabe-Strom.
16
© 2005 Pohlig - Taulien
Der Server
import java.net.*;
import java.io.*;
public class Server {
}
public static void main (String[] args)
throws IOException{
ServerSocket anschluss = new ServerSocket(6000);
while(true){
Socket lauschen = anschluss.accept();
InputStreamReader portLeser =
new InputStreamReader(
lauschen.getInputStream());
BufferedReader eingabe =
new BufferedReader(portLeser);
String text = eingabe.readLine();
System.out.println("von Client: " + text);
}
}
Datenströme GK Informatik
17
Herunterladen