C# - 读取和写入文本文件
StreamReader 和 StreamWriter 类用于读取和写入文本文件数据。这两个类继承自抽象基类 Stream,后者支持将字节读取和写入文件流。
StreamReader 类
StreamReader 类也继承自抽象基类 TextReader,后者表示用于读取一系列字符的读取器。下表介绍了 StreamReader 类的一些常用方法 -
序号 | 方法 &说明 |
---|---|
1 | public override void Close() 关闭 StreamReader 对象和底层流,并释放与读取器关联的所有系统资源。 |
2 | public override int Peek() 返回下一个可用字符,但不使用它。 |
3 | public override int Read() 从输入流读取下一个字符,并将字符位置前进一。 |
示例
以下示例演示如何读取名为 Jamaica.txt 的文本文件。文件内容为:-
Down the way where the nights are gay And the sun shines daily on the mountain top I took a trip on a sailing ship And when I reached Jamaica I made a stop
using System; using System.IO; namespace FileApplication { class Program { static void Main(string[] args) { try { // 创建 StreamReader 的实例来从文件中读取。 // using 语句还会关闭 StreamReader。 using (StreamReader sr = new StreamReader("c:/jamaica.txt")) { string line; // 读取并显示文件中的行,直到 // 已到达文件末尾。 while ((line = sr.ReadLine()) != null) { Console.WriteLine(line); } } } catch (Exception e) { // 让用户知道哪里出了问题。 Console.WriteLine("The file could not be read:"); Console.WriteLine(e.Message); } Console.ReadKey(); } } }
猜猜编译并运行程序后会显示什么!
StreamWriter 类
StreamWriter 类继承自抽象类 TextWriter,后者表示一个写入器,可以写入一系列字符。
下表描述了此类最常用的方法 -
Sr.No. | 方法 &说明 |
---|---|
1 | public override void Close() 关闭当前 StreamWriter 对象和底层流。 |
2 | public override void Flush() 清除当前写入器的所有缓冲区,并将所有缓冲数据写入底层流。 |
3 | public virtual void Write(bool value) 将布尔值的文本表示形式写入文本字符串或流。 (继承自 TextWriter。) |
4 | public override void Write(char value) 将字符写入流。 |
5 | public virtual void Write(decimal value) 将十进制值的文本表示形式写入文本字符串或流。 |
6 | public virtual void Write(double value) 将 8 字节浮点值的文本表示形式写入文本字符串或流。 |
7 | public virtual void Write(int value) 将 4 字节有符号整数的文本表示写入文本字符串或流。 |
8 | public override void Write(string value) 将字符串写入流。 |
9 | public virtual void WriteLine() 将行终止符写入文本字符串或流。 |
有关方法的完整列表,请访问微软的 C# 文档。
示例
以下示例演示了如何使用 StreamWriter 类将文本数据写入文件 -
using System; using System.IO; namespace FileApplication { class Program { static void Main(string[] args) { string[] names = new string[] {"Zara Ali", "Nuha Ali"}; using (StreamWriter sw = new StreamWriter("names.txt")) { foreach (string s in names) { sw.WriteLine(s); } } // 读取并显示文件中的每一行。 string line = ""; using (StreamReader sr = new StreamReader("names.txt")) { while ((line = sr.ReadLine()) != null) { Console.WriteLine(line); } } Console.ReadKey(); } } }
当编译并执行上述代码时,它会产生以下结果 -
Zara Ali Nuha Ali