技术开发 频道

使用StreamWriter和StreamReader类型


【IT168技术文档】

  当需要读写基于字符的数据(比如字符串)的时候,StreamReader和StreamWriter就非常有用了。它们都默认使用Unicode字符,当然我们也可以提供一个正确配置的System.Text.Encoding对象的实例来改变默认配置。为了使例子更简单,假设默认的Unicode编码能满足我们的需求。

  StreamReader和相关的StringReader(本章后面会讨论)一样,它们都从TextReader抽象类型派生。TextReader基类为这些派生类型提供了一套非常有限的功能,特别是读取字符流。

  StreamWriter类型(和后面会讨论的StringWriter一样)从TextWriter抽象基类派生。这个类定义了一些成员,使得派生的类型能向某个字符流写入文本数据。图16-7显示了这些新的I/O对象之间的关系。

  为了帮助读者理解StreamWriter和StringWriter类主要的功能,表16-7列举了一些TextWriter抽象基类的核心成员。

  注解 TextWriter最后两个成员可能对读者来说很熟悉。前面说过,System.Console类型就有Write()和WriteLine()成员来向标准输出设备写入文本数据。其实,Console.In属性包装了一个TextWrite,Console.Out属性包装了一个TextReader。

  派生的StreamWriter类提供了对Write()、Close()和Flush()方法的有效实现,而且还定义了AutoFlush属性。如果把这个属性设置为true的话,StreamWriter会在每次执行一个写操作后,立即写入数据并清理缓冲区。设置AutoFlush为false能获得更好的性能,这样的话,使用StreamWriter完成了写操作后需要调用Close()。

  写文本文件

  现在举一个使用StreamWriter类型的例子。下面的类使用File.CreateText()方法新建一个reminders.txt文件。使用返回的StreamWriter对象向新建的文件增加一些文本数据,代码如下
static void Main(string[] args) { Console.WriteLine("***** Fun with StreamWriter / StreamReader *****\n"); // 得到一个StreamWriter对象并写入字符串数据。 StreamWriter writer = File.CreateText("reminders.txt"); writer.WriteLine("Don't forget Mother's Day this year..."); writer.WriteLine("Don't forget Father's Day this year..."); writer.WriteLine("Don't forget these numbers:"); for(int i = 0; i < 10; i++) writer.Write(i + " "); // 插入一个新行。 writer.Write(writer.NewLine); // Close()自动实现Flush操作! writer.Close(); Console.WriteLine("Created file and wrote some thoughts..."); }
0
相关文章