Advanced   Java   Services StreamReader, StreamWriter Back Next Up Home

StreamReader
Einige Konstruktoren
public StreamReader(string path) Initializes a new instance of the StreamReader class for the specified file name.
public StreamReader(string path, Encoding encoding) Initializes a new instance of the StreamReader class for the specified file name, with the specified character encoding.
Einige Methoden
Returntyp Name der Methode
override void Close()
Closes the StreamReader object and the underlying stream, and releases any system resources associated with the reader. [Overrides TextReader::Close()]
void Dispose()
Releases all resources used by the TextReader object. [Inherited from TextReader]
virtual void Finalize()
Allows an Object to attempt to free resources and perform other cleanup operations before the Object is reclaimed by garbage collection. [Inherited from Object]
override int Peek()
Returns the next available character but does not consume it. [Overrides TextReader::Peek()]
override int Read()
Reads the next character from the input stream and advances the character position by one character. [Overrides TextReader::Read()]
virtual int ReadBlock(char[] buffer, int index, int count)
Reads a maximum of count characters from the current stream, and writes the data to buffer, beginning at index. [Inherited from TextReader]
override string ReadLine()
Reads a line of characters from the current stream and returns the data as a string. [Overrides TextReader::ReadLine()]
override string ReadToEnd()
Reads the stream from the current position to the end of the stream. [Overrides TextReader::ReadToEnd()]
If the current position is at the end of the stream, returns the empty string("").


Codebeispiel

Wir verwenden den einfachsten Konstruktor und öffnen damit eine Textdatei. Man stellt fest, daß Umlaute im Text nicht immer erkannt werden. StreamReader verwendet zum Lesen ein voreingestelltes Encoding und dies kann ein anderes sein als das Encoding mit dem die Textdatei von irgendeinem Texteditor abgespeichert wurde. Leider gibt es mittlerweile sehr viele Encodings und das Erkennen eines unbekannten Encodings ist keine triviale Aufgabe. Im nächsten Kapitel werden wir uns daher mit Encoding befassen und klären, welches Encoding der StreamReader standardmäßig verwendet.

Mit einem Streamreader kann man eine Datei nur einmal lesen. Ist man am Ende angelangt, so muß für ein erneutes Lesen der StreamReader erst geschlossen und dann wieder neu geöffnet werden.

   class StreamReaderDemo
   {
      static void Main(string[] args)
      {
         StreamReader sr = null;
         try
         {
            // Kein Encoding angegeben
            // Umlaute werden nicht erkannt
            sr = new StreamReader("mytext.txt");

            //Zeilenweise lesen
            for (string line; (line = sr.ReadLine()) != null; )
            {
               Console.WriteLine(line);
            }
         }
         catch(Exception ex)
         {
            Console.WriteLine(ex.Message);
         }
         finally
         {
            if( sr!=null) sr.Dispose();
            // Datei kann nur einmal gelesen werden
         }

         // erneute Verwendung der Referenz
         using( sr = new StreamReader("../../../glaubensbekenntnis.txt") )
         {
            // kleine Textdateien auf einmal lesen
            string text = sr.ReadToEnd();
            Console.WriteLine(text);
         }
      }
   }

StreamWriter
Einige Konstruktoren
public StreamWriter(string path) Initializes a new instance of the StreamWriter class for the specified file on the specified path, using the default encoding and buffer size.
public StreamWriter(Stream stream, Encoding encoding) Initializes a new instance of the StreamWriter class for the specified stream, using the specified encoding and the default buffer size.
public StreamWriter(string path, bool append) Initializes a new instance of the StreamWriter class for the specified file on the specified path, using the default encoding and buffer size. If the file exists, it can be either overwritten or appended to. If the file does not exist, this constructor creates a new file.
public StreamWriter(string path, bool append, Encoding encoding) Initializes a new instance of the StreamWriter class for the specified file on the specified path, using the specified encoding and default buffer size. If the file exists, it can be either overwritten or appended to. If the file does not exist, this constructor creates a new file.
Einige Methoden
Returntyp Name der Methode
override void Close()
Closes the current StreamWriter object and the underlying stream. [Overrides TextWriter::Close()]
void Dispose()
Releases all resources used by the TextWriter object. [Inherited from TextWriter]
override void Flush()
Clears all buffers for the current writer and causes any buffered data to be written to the underlying stream. [Overrides TextWriter::Flush()]
virtual void Write(...)
Overloaded like Console.Write(...). [Inherited from TextWriter.]
virtual void WriteLine()
Overloaded like Console.Write(...). [Inherited from TextWriter.]


Codebeispiel

Nachdem im letzten Abschnitt die Fehlerbehandlung ausführlich behandelt wurde, wird hier in den Codebeispielen nicht immer eine Fehlerbehandlung durchgeführt.

class StreamWriterDemo
{
   static void Main(string[] args)
   {
      WatchFilesystem(".");

      StreamWriter sw = new StreamWriter("streamwriterdemo.txt");
      Console.WriteLine("StreamWriter verwendet das encoding " + sw.Encoding);
      // Write und WriteLine analog wie Console.Write(Line) überladen !
      sw.WriteLine("Hallo");
      sw.WriteLine("Wörter mit Umlauten:");
      sw.WriteLine("schön, häßlich, übermütig");
      sw.WriteLine("Ein Satz in französisch:");
      sw.Write("Il est bientôt Noël, as-tu déjà acheté des cadeaux?");
      // Windowszeilenumbruch von Hand schreiben \r\n
      sw.Write('\r');
      sw.Write('\n');
      sw.WriteLine("Das griechischen Alphabets (Unicode) schreiben:");
      // beginnt bei 0x3b1 und endet bei 0x3c9
      for (int i = 0x3b1; i < 0x3ca; i++)
      {
         sw.Write(Convert.ToChar(i) + " ");
      }
      sw.WriteLine();
      sw.Close();
   }
}

Man erkennt an diesem Beispiel, daß der StreamWriter UTF8 als Encoding verwendet, dies ist auch für Streamreader die Voreinstellung. Öffnet man die Datei in Notepad oder auch in Word wird man feststellen, daß alle Zeichen korrekt dargestellt werden. Word erkennt, daß die Codierung nicht Windows (Standard) ist und schlägt UTF8 vor.

Valid XHTML 1.0 Strict top Back Next Up Home